2016-08-05 21 views
1

Ich habe versucht, diese Funktion zu sehen, ob andere Objekte arelationship miteinander haben, so habe ich versucht:Wie mache ich Javascript "isPrototypeOf" -Funktion zurück wahr?

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

Nun, es druckt 2 Falschen. Ich fühlte mich seltsam, dass "Prototyp" eine Eigenschaft/Funktion jeder Funktion/jedes Objekts ist. Wie beurteilt JS, ob ein Objekt der Prototyp eines anderen ist?

ich auch versucht:

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)); 

Wieder druckt 2 Falschen, während ich 2 trues erwarten.

+1

Unendlichkeit. 'a' proto von' b' und 'b' proto von' a', das wird nicht passieren. – Tushar

+2

Sie ordnen Objektverweisen nur Variablen zu. Das hat nichts mit Prototypen zu tun. Um eine Prototypkette zu erstellen, müssen Sie entweder 'new' oder' Object.create' verwenden. – ftor

+0

Bitte lesen Sie die Dokumentation zu 'isPrototypeOf' noch einmal durch. Sie machen "isPrototypeOf" -Funktion wahr ", wenn das eine Objekt tatsächlich der Prototyp des anderen ist. –

Antwort

1

Für ein o sein, um einen Prototyp des o2o2 Objekt von einem Konstruktor dessen Prototyp konstruiert werden muss, ist o. Mit anderen Worten, o2 muss richtig erbeno.

Es ist nicht genug, dass eine Variable einem Objekt zugewiesen wird oder zwei Objekte ähnlich sind. Ein Objekt muss von einem anderen erben.

So im klassischen Sinne, muss dies geschehen:

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

var o2 = new OConstructor(); 

o.isPrototypeOf(o2); // true 

In modernen Code können Sie erben auch Object.create() mit:

var o = {}; 

var o2 = Object.create(o); 

o.isPrototypeOf(o2); // true 
0

Nach var o2=oo2 zeigt auf o. So zeigt o und o2 auf dasselbe Objekt. Ist o Prototyp von sich selbst? Nein. Ist o2 Prototyp von sich selbst? Nein nochmal. Im zweiten Teil o1 ist kein Prototyp o2. Versuchen

console.log(Person.prototype) 

Sie werden sehen, das Prototypobjekt Instanzen von Person (es ist nicht der Prototyp Person-Funktion) zu nennen.

Sie können auch obj.__proto__ verwenden, um den Prototyp von obj zu sehen. Es ist verborgenes Eigentum. Besser nicht in der Produktion verwenden.

+0

Ich habe ein weiteres Code-Snippet hinzugefügt, siehe oben, danke. – Troskyvs