2012-01-21 6 views
4

私はECMAScript 5(ブラウザでは、私が知っているすべてのものをサポートしていないES5-shimを使用しています)をもう少し読んでいます。このプロパティ記述子とECMAScript 5のプロパティ割り当ての違いは?

var Person = { 
    firstName: null, // the person’s first name 
    lastName: null // the person’s last name 
}; 

は、この間のいずれかの違いがあります::

var Employee = Object.create(Person, { 
    id: { 
     value: null, 
     enumerable: true, 
     configurable: true, 
     writable: true 
    } 
}); 

そして、この:

var Employee = Object.create(Person); 
Employee.id = null; 

// Or using jQuery.extend 
$.extend(Employee, { 
    id : null 
}); 

そして、ちょうど私が(this postから盗まれた)このオブジェクトを持って考えると、任意の混乱を解消するには私が理解できる限り、設定可能で書き込み可能なプロパティは、このようにプロパティを定義するときにtrueに設定されます(これは、従来のJavaScriptエンジンと下位互換性があります)。私は何かが欠落しているか、これを望ましい動作にしたいときは、冗長なプロパティ記述子を省略することはできますか?

答えて

4

これらは同じです。

割り当て

obj.prop = val; 

て新しいプロパティを作成する場合は、新しく作成されたプロパティのすべての3つのブール属性がtrueに設定されています。また


は、Object.defineProperty

Object.defineProperty(obj, 'prop', { 
    value: val 
}); 

を介してプロパティを追加するときにブール属性が(デフォルトで)falseに設定されていることに気づきます。

+0

ありがとうございました。私はまた、プロパティ記述子を使用するときのデフォルト値が異なっていることに気付きました。とにかくシムがレガシーシステムでデフォルトに戻ってから、少し慎重に使用しています。 – Daff

関連する問題