2012-03-01 8 views
2
var Person = function(name, age){ 
    return Object.create(Object.prototype, { 
     name: { 
      value: name | "", 
      writable: true, 
      enumerable: true, 
      configurable: true 
     }, 
     age: { 
      value: age | "", 
      writable: true, 
      enumerable: true, 
      configurable: true 
     } 
    }); 
}; 

var Boy = function(name, age){ 
    return Object.create(Person(name, age), { 
     gender: { 
      value: "male" 
     } 
    }); 
}; 

var p = Person("John", 28); 
var b = Boy(); 

console.log(p.isPrototypeOf(b)); // false? 

私はobject.create理解しようとしていると最善の方法は、newキーワードコンストラクタの使用を避け、それを使用します。これまで私は上記のようにアプローチしていますが(おそらく最も良い方法ではなく、試行錯誤)、object.createを使用すると、instanceofとオブジェクトタイプをチェックすることができなくなりました。Javascriptのobject.createとisPrototypeOfは

誰かがisPrototypeOfを使用してチェックすることを提案しました - 私のコードが上記のように何か間違っていると確認すると、falseが返されます。

誰かが私が間違っていることを説明するのに十分なほど優しい人ですか?私はまだjavascriptでプロトタイプの継承に新しいです。

答えて

2

もちろん、pはbのプロトタイプではありません。

これは、毎回Person関数が新しいオブジェクトを返すためです。

var Boy = function(person, name, age){ 
    return Object.create(person, { 
     gender: { 
      value: "male" 
     } 
    }); 
}; 


var p = Person("John", 28); 
var b = Boy(p); 
assert(p.isPrototypeOf(b)) 
次のことを試してみてください
関連する問題