2016-08-05 1 views
1

私は別のオブジェクトが互いにarelationshipを持っているかどうかを確認するために、この機能をしようとしていたので、私は試してみました:Javascriptの作成方法isPrototypeOf関数はtrueを返しますか?

var o={name:'abc'}; 
var o2=o; 
console.log(o.isPrototypeOf(o2)); 
console.log(o2.isPrototypeOf(o)); 

まあ、それは2 falsesを印刷します。 「プロトタイプ」は各関数/オブジェクトのプロパティ/関数なので、JSはどのオブジェクトが別のオブジェクトのプロトタイプであるかをどのように判断するのでしょうか?

は、私も試してみました:私は2 truesを期待しながら、

var Person=function(){ 
    name='abc', 
    age=30 
}; 
var o1=new Person(); 
var o2=new Person(); 
console.log(o1.isPrototypeOf(o2)); 
console.log(o2.isPrototypeOf(o1)); 

ここでも、それは、2 falsesを印刷します。

+1

インフィニティ。 'a'の' b'と 'b'のproto、それは起こりません。 – Tushar

+2

オブジェクト参照を変数に代入するだけです。これはプロトタイプとは関係ありません。プロトタイプチェーンを作成するには、 'new'か' Object.create'のどちらかを使う必要があります。 – ftor

+0

'isPrototypeOf'のドキュメントをもう一度読んでください。一方のオブジェクトを実際にもう一方のプロトタイプにすることによって、isPrototypeOf'関数がtrueを返すようにします。 –

答えて

1

oのプロトタイプをo2とすると、o2オブジェクトは、プロトタイプがoであるコンストラクタから構築する必要があります。換言すれば、o2は適切にを継承し、oを継承する必要があります。

変数にオブジェクトが割り当てられていないか、2つのオブジェクトが似ているだけでは不十分です。 1つのオブジェクトは別のオブジェクトを継承する必要があります。

だから、古典的な意味では、この現象が発生しなければならない:現代のコードで

var o = {}; 
var OConstructor = function() {}; 
OConstructor.prototype = o; 

var o2 = new OConstructor(); 

o.isPrototypeOf(o2); // true 

をあなたもObject.create()を使用して継承することができます。

var o = {}; 

var o2 = Object.create(o); 

o.isPrototypeOf(o2); // true 
0

var o2=oo2oを指しています。したがって、oo2は同じオブジェクトを指します。 o自身のプロトタイプですか?いいえ。o2のプロトタイプはありますか?もう一度。

o1o2のプロトタイプではありません。 あなたが(それはPerson関数のプロトタイプではありません)インスタンスPersonのプロトタイプオブジェクトが表示されます

console.log(Person.prototype) 

を呼び出すようにしてください。

またobj.__proto__を使用して、プロトタイプobjを見ることができます。それは隠された財産です。本番環境では使用しない方がいいです。

+0

別のコードスニペットを追加しました。上記を参照してください。ありがとうございます。 – Troskyvs

関連する問題