2017-03-03 10 views
2

Object.createでpropertiesオブジェクトのパラメータを使用しようとしていますが、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

をやっているのとあなたは4としてlegsを説明してきた、と4はオブジェクトではありません。

は、あなたがそこに割り当てることができるものの種類の例を含んでthe MDN documentationを参照してください:私たちはfoo代わりのlegsを使用するこの例では

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

。オブジェクトの値。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)の2番目のパラメータ]

上記propsObject.create(proto[, propertiesObject])は、第&における{&}オプションパラメータは、オブジェクトの特性を説明するためのいくつかのキーを有している。

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

コードをdogオブジェクトでき​​:上記のリンクの参照の両方を読み取る、より明確にするため

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

を、非常に有用です。

関連する問題