2017-01-23 3 views
2

Ich bekomme immer Kann Eigenschaft 'saySomething' von undefined nicht festlegen, aber warum? Ist hier irgendwo ein Fehler?Javascript-Prototyp-Methode "Kann Eigenschaft nicht festlegen"

var Person = new Object(); 

Person.prototype.saySomething = function() 
{ 
    console.log("hello"); 
}; 

Person.saySomething(); 
+0

Warum versuchen Sie Prototyp zu benutzen? Du hast keine Klasse, du hast nur ein Objekt, also ordne einfach direkt die Methode zu: 'Person.saySomething = ...' – Bergi

Antwort

5

Debugging Tipp: Sie können verschied ..of undefined Fehler, wenn Sie versuchen, eine Eigenschaft von undefinierten zuzugreifen.

Wenn Sie new Object() tun, erstellt es ein neues leeres Objekt, das keine Prototypeigenschaft hat.

Ich bin mir nicht sicher, was genau wir hier erreichen wollen, aber Sie können auf den Prototyp der Funktion zugreifen und ihn verwenden.

var Person = function() {}; 
 

 
Person.prototype.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
var aperson = new Person(); 
 
aperson.saySomething();

-1

Sie können here überprüfen.

var Person = function(name) { 
    this.canTalk = true; 
    this.name = name; 
}; 
Person.prototype.greet = function() { 
    if (this.canTalk) { 
    console.log('Hi, I am ' + this.name); 
    } 
}; 

bob = new Person('bob'); 
bob.greet(); 
3

Der Prototyp Eigenschaft auf Funktionen, nicht auf instanziiert Objekte existiert.

var Person = new Object(); 
 
console.log(Person.prototype); // undefined 
 

 
var Person2 = function() {} 
 
console.log(Person2.prototype); // {}

Dies ist nützlich, weil die Dinge auf dem Prototyp einer Funktion gesetzt werden mit dieser Funktion (unter Verwendung new) erstellt von allen Objektinstanzen gemeinsam genutzt werden.

var Person = function() {}; 
 

 
Person.prototype.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
console.log(
 
    new Person().saySomething === Person.prototype.saySomething // true. they are the same function 
 
);

Wenn alles, was Sie wollen, ist eine Methode, um die Person, Objekt hinzuzufügen, gibt es keine Notwendigkeit für einen Prototypen:

var Person = {}; 
 

 
Person.saySomething = function() { 
 
    console.log("hello"); 
 
}; 
 

 
Person.saySomething();

Sie können sogar Verwenden Sie die Objektliteralsyntax:

var Person = { 
 
    saySomething: function() { 
 
    console.log("hello"); 
 
    } 
 
}; 
 

 
Person.saySomething();

Verwandte Themen