[英]Why is Object.create() so verbose?
Object.create是JavaScript的重要補充,因為它更符合JS的原型性質。 但是,我不禁發現該函數的第二個參數的語法過於冗長,然后退后一步。
例如,如果我要創建一個對象並在派生對象中指定一個新屬性,則無論我是否對其他功能感興趣,都需要將該屬性值包含在屬性對象中。
所以,像這樣簡單:
o = Object.create({}, { p: 42 })
現在變成:
o = Object.create({}, { p: { value: 42 } })
顯然,這是一個簡單的示例,但是對我來說,冗長是不必要的,應該是可選的。
有誰了解需要屬性對象的決定? 您對新語法的要求有何看法?
注意 :我知道有簡單的解決方案可以克服此要求。
語法是通過這種方式完成的,因此您可以添加控制每個屬性的參數:
因此,當您這樣做時:
o = Object.create({}, { p: { value: 42 } })
您說的是想要一個名為p
的值為42
的屬性。 這里的關鍵是可以為每個屬性設置其他參數,並且如果沒有這種額外級別的對象層次結構,則您將無法傳遞這些額外參數。
因此,例如,您也可以這樣做:
o2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } });
您不僅在指定42
的值,而且還為該屬性指定了一些選項。 如果這里沒有多余的對象層次結構,那么您將無處放置這些額外的選項。
是的,當您只需要簡單的情況時,似乎確實不方便。 但是,您可以輕松地編寫自己的幫助程序函數,以使更簡單的語法起作用:
function myCreate(proto, props, enumerable, writable, configurable) {
// last three arguments are optional - default them to true if not present
if (typeof enumerable === "undefined") {enumerable = true;}
if (typeof writable === "undefined") {writable = true;}
if (typeof configurable === "undefined") {configurable = true;}
var wrapper = {};
for (var i in props) {
wrapper[i] = {
value: props[i],
enumerable: enumerable,
configurable: configurable,
writable: writable
};
}
return(Object.create(proto, wrapper));
}
此處的演示: http : //jsfiddle.net/jfriend00/vVjRA/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.