4

JavaScript で Object.Create を使用しようとしています。現在、次のコードがあります。

var vehicle = {
        getModel: function () {
        console.log( "The model of this vehicle is.." + this.model );
    }
};

var car = Object.create(vehicle, {
    "id": {
       value: 9,         
    },
    "model": {
       value: "Ford",  
    }
});

var van = Object.create(vehicle, {
  "id": {
     value: 10,    
   },
    "model": {
      value: "Big Van",
      enumerable: true
   },
    "make": {
      value: "Warrior",      
   },
    "getMake": function () {
       console.log( "The make of this vehicle is.." + this.make );
   }
});

getMake の関数を van に追加しようとしましたが、エラーが発生しました:

TypeError: オブジェクト # のプロパティ 'getMake' は、呼び出したときに関数ではありません:

van.getMake();

これは可能ですか?どのようにしますか?

4

2 に答える 2

6

この方法で作成されたプロパティは、既定では列挙できません。これが問題の原因となっている可能性があります。

これを試してください(テストされていません):

"getMake": { value: function () {
       console.log( "The make of this vehicle is.." + this.make )
   }, enumerable: true };

編集値だけでなくオブジェクトを渡しているため、これは機能しているように見えます。列挙可能は不要です。

于 2012-11-26T13:01:08.650 に答える
2

value だけでなく、プロパティを定義するオブジェクトを渡す必要があります。

 "getMake": {value:function () {
     console.log( "The make of this vehicle is.." + this.make );
 }}

参照

Javascript で OOP を実行する通常の方法は、 Object.create を使用するのではなく、prototypeを使用することに注意してください。

于 2012-11-26T13:03:17.520 に答える