2016-07-01 17 views
1

Ich bin ein Neuling mit JavaScript und ich habe ein Problem mit Konstruktorfunktionen, mein Problem ist, dass ich die Eigenschaft einer alten Funktion nicht mit einer neuen überschreiben kann!Ich kann eine Eigenschaft in einer Konstruktorfunktion nicht ändern

Unten ist mein Code:

function myFun() { 
 
    this.anotherFun = function() { 
 
    return true; 
 
    } 
 
} 
 

 
var myVar = new myFun(); 
 

 
console.log(myVar.anotherFun()); // returns 'true' as expected; 
 

 
myFun.prototype.anotherFun = function() { 
 
    return false; 
 
} 
 

 
console.log(myVar.anotherFun()); // is returns 'true' why not 'false'?

+1

'myFun.prototype.anotherFun ='> 'myFun.anotherFun =' – dandavis

+1

Sie haben zwei Funktionen, eine eigene Eigenschaft und eine Prototypeigenschaft. Eigene Eigenschaften wie Dandavis zeigen, werden zuerst nachgeschlagen. – elclanrs

Antwort

3

Denn wenn die gleiche Eigenschaft mehrfach in der prototypische Kette erscheint, macht es Sinn, die am nächsten zu verwenden.

Ihre Instanz verfügt über eine eigene Eigenschaft. Sie können sie daher nicht überschreiben, indem Sie eine geerbte hinzufügen.

Sie werden vielleicht nicht

function myFun(){} 
 
myFun.prototype.anotherFun = function(){return true}; 
 
var myVar = new myFun(); 
 
console.log(myVar.anotherFun()); // true 
 
myFun.prototype.anotherFun = function(){return false}; 
 
console.log(myVar.anotherFun()); // false

+0

Danke, das funktioniert bei mir !, aber warum schreiben wir nicht die Funktion myFun() {this.prototype.anotherFun = function() {return true};} anstelle der Funktion myFun() {} myFun.prototype.anotherFun = function() {return true}; –

+1

@ M.Taki_Eddine Da es keinen Grund gibt, diesen Code jedes Mal auszuführen, wenn Sie eine Instanz erstellen. Also sollte es außerhalb des Konstruktors sein. – Oriol

1

Was hinzuzufügen myFun als eigene Eigenschaft wollten Sie versuchen, werden nicht als eigene Eigenschaften mit Ihrem Code zu tun, arbeiten immer vor nachgeschlagen werden Prototyp-Eigenschaften, so dass die Änderung, die Sie an der Prototyp-Eigenschaft vornehmen, keine sichtbaren Auswirkungen hat. Damit dies funktioniert, können Sie Ihren Code ändern immer Eigenschaften Prototyp verwenden:

function myFun(){} 
 
myFun.prototype.anotherFun = function(){return true;} 
 
var myVar=new myFun(); 
 
console.log(myVar.anotherFun()); // returns 'true' as expected; 
 
myFun.prototype.anotherFun=function(){return false;} 
 
console.log(myVar.anotherFun()); // now returns 'false' as expected

Wenn Sie mehr über dieses Thema wissen möchten, überprüfen this Question.

+0

Danke, das funktioniert für mich !, aber warum schreiben wir nicht die Funktion myFun() {this.prototype.anotherFun = function() {return true};} anstelle der Funktion myFun() {} myFun.prototype.anotherFun = function() {return true}; - –