2012-01-21 110 views
4

我正在閱讀ECMAScript 5(在瀏覽器中,使用ES5-shim,我知道它不支持所有內容)。而只是爲了消除混淆,考慮到我有這個對象(從this post被盜):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 
}); 

據我瞭解enumerable,可配置和可寫的設置爲真時,這樣定義一個屬性(這也將向後兼容傳統的JavaScript引擎)。我是否錯過了某些東西,或者只要我希望這是所需的行爲,就可以忽略詳細的屬性描述符?

回答

4

它們是一樣的。

當分配

obj.prop = val; 

新建物業的所有三個布爾屬性設置爲true創建新的屬性。


另外,注意通過Object.defineProperty

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

添加屬性時,布爾屬性被設置爲false(默認)。

+0

謝謝,只是想確認一下。我還注意到,使用屬性描述符時的默認值不同。我仍然有點小心使用它,因爲無論如何shim默認回到遺留系統。 – Daff

相關問題