2017-03-03 75 views
2

我想在Object.create中使用屬性對象參數,mdn說你傳入一個對象,但是當我傳入一個對象時,我得到一個錯誤告訴我要傳遞一個對象,我很困惑以我在做什麼錯爲什麼不是這個簡單的繼承工作?

let mammal={hasFur:true} 

let dog=Object.create(mammal,{legs:4});//returns Uncaught TypeError: Property description must be an object: true at Function.create (<anonymous>) 

回答

3

你形容legs44不是一個對象。

the MDN documentation它包括各種各樣的東西,你可以指定有例子:

o = Object.create(Object.prototype, { 
    // foo is a regular 'value property' 
    foo: { 
    writable: true, 
    configurable: true, 
    value: 'hello' 
    }, 

在這個例子中,我們使用foo,而不是legs。一個對象的值,其中包含一個value屬性,其中包含foo的默認值。

2

在一個簡單的定義中,Object.create(proto[, propertiesObject])是定義對象屬性的摘要或定義對象屬性的規範的一種方式。它的工作原理與其他一些語言中的abstract classes類似,&不是specific object

它並不一定爲正在創建的對象的道具提供默認值。 您只提供了一個文字(4),這顯然不是能夠描述屬性規範的對象。我們將在這裏看到,它自己的4個(甚至不一定)只是腿的屬性對象的一部分。

現在。考慮到這一點,我們嘗試使用Object.create()來創建dog對象。在這裏,我們去:

  • 要求:我們希望我們的狗有一個名爲legs屬性。我們需要legs枚舉對象時可枚舉。我們不想讓別人用賦值運算符來改變它。 &我們也希望默認爲4
  • 實施:現在,我們已經決定legs財產的規範,我們需要一個Property Descriptor來定義它[的Object.defineProperties(obj, props)第二個參數]

的。上述props是第二{&}可選在Object.create(proto[, propertiesObject]) &參數具有用於描述對象的特性一些鍵:

props {configurable, enumerable, value, writable, get, set} 

允許代碼dog對象:

let dog=Object.create(mammal,{ 
         legs:{ 
          enumerable : true, 
          writable : false, 
          value : 4 } 
        }); 

更多的澄清,讀取二者上面鏈接的參考文獻,是高度有益的。

相關問題