2016-05-05 8 views
2
obj1 = Object.create({}, { property: { enumerable: true, value: 42 } }) 

> obj1.property = 56 
> 56 
> obj1.property 
> 42 

厳密にはに間違いがあります。JS [ES5]セッターとゲッターにオブジェクトを割り当てる方法は?

私は複数のオブジェクト組み合わせたい:ES6 Object.assignで

new_obj = $.extend(true, objN, obj1) 

:jQuery.extendと を()

new_obj = Object.assign({}, objN, obj1) 

いずれの場合も、ゲッターは通常のプロパティに変身したがって、変更することができます。それを避ける方法は?

+0

あなたの例ではセッターとゲッタはありません。書き込みできないプロパティがありますか? – Bergi

+0

はい、簡単な例です。しかしセッターとゲッターは同じです。 –

+0

'use strict'ディレクティブを使用しているときにエラーを修正することに関する質問はありましたか?もしそうなら、変数の代入を 'var'や' let'のようなキーワードを使うように変更してください。 –

答えて

0

あなたは、プロパティの上にもコピーが属性を独自の関数記述することができます。

function extend(target, ...sources) { 
    for (let source of sources) 
     for (let key of Object.keys(source)) 
      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); 
    return target; 
} 

しかし、ゲッターとセッターが閉鎖されている場合Object.assignは、それは奇妙な効果を持つことができない理由を正当な理由があると気づくが。

+0

_proto_のプロパティでは機能しません。 $ .extend better –

+2

サンプルオブジェクトのプロトタイプにプロパティがありませんでした。それらのすべてをコピーしたい場合は、ソースのプロトタイプチェーンも反復​​処理します。 Btw、 'Object.assign'は継承されたプロパティも考慮しません。 – Bergi

関連する問題