2016-08-08 8 views
0

ESは、そのプロトタイプはすべてのオブジェクトのプロパティだと言っていますか?はい、どちらも "コンストラクタ関数"と "オブジェクトインスタンス"はすべて関数/オブジェクトであり、それらはすべて "プロトタイプ"プロパティを持つ必要があります。 JavaScriptでオブジェクトのプロトタイプを使用できない理由は? "isPrototypeOf"?

しかし、私が試したとき:

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

コンソールプリント例外が言って:

console.log(o2.prototype.isPrototypeOf(o1)); 
        ^
TypeError: Cannot read property 'isPrototypeOf' of undefined 

そのエラーは何ですか?私はそれが知っている

console.log(Person.prototype.isPrototypeOf(o1)); 

作品。しかし、なぜ "Person"はisPrototypeOfメソッドでプロトタイプを持ちますが、o2はそのようなプロパティ/メソッドを持っていませんでしたか?

は、その後、私はこれを試してみました:

console.log(o2.prototype.prototype.isPrototypeOf); 

それも失敗した、これはさらに奇妙です

console.log(o2.prototype.prototype.isPrototypeOf); 
         ^
TypeError: Cannot read property 'prototype' of undefined 

を言って:O2のプロトタイプは "人" であるならば、私は

Person.prototype == o2.prototype.prototype 
を期待します

しかし、なぜそれでも失敗するのですか?

+0

_Instances_は、一般的に 'prototype'sを持っていません。コンストラクタ関数だけが持っています。 'Object.getPrototypeOf(o1)'を試すことができます。 'Array.prototype'と' [] .prototype'の違いは同じです。 – Xufox

答えて

1

あなたは使用する必要があります。

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

ありがとうございますが、 "Person()"によって "o1"が作成されている限り、o1のプロトタイプが "Person.prototype"であることは自動ではありませんか?追加のプロトタイプ割り当てが必要なのはなぜですか? – Troskyvs

+0

ああ、インスタンスではプロトタイプが利用できないので、コンストラクタ関数でのみ使用できます。 –

関連する問題