簡體   English   中英

為什么Object.create()如此冗長?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM