2016-11-18 15 views
0

Hier ist, was mich in JavaScript verwirrt: Im folgenden Code habe ich einen Objektkonstruktor mit einer Eigenschaft. Darunter füge ich einige Prototyp-Methoden hinzu. Die Methode 'method1' kann problemlos auf 'this.property' zugreifen und gibt den Wert 30 zurück. Die Methode 'combine' ruft nur 'method1' auf, gibt aber NaN zurück. Es scheint so, als ob "diese.Property" für den ersten Anruf öffentlich war, aber nicht für den zweiten. Warum dieses seltsame Verhalten?js: Methode kann nicht auf Eigenschaft zugreifen

var ObjBuilder = function() 
{ 
    this.property = 3; 
}; 

ObjBuilder.prototype = function() 
{ 
    var method1 = function() 
    { 
    return this.property * 10; 
    } 
    var combine = function() 
    { 
    return method1() + 2; 
    } 
    return {method1: method1, 
      combine: combine}; 
}(); 

// instantiate an object and call its methods 
var obj = new ObjBuilder(); 
console.log(obj.method1());//prints 30 
console.log(obj.combine());//prints NaN. WHY??? 
+0

Wenn Sie 'this' in' method1' protokollieren, rufen Sie es innerhalb von 'combine' auf. Sie werden das Problem sehen – Li357

+0

@ t.niese [Es scheint nicht so] (https://jsfiddle.net/3ovc6Lye /) - 'Fenster'. Sie müssen es 'this.method1()' nennen, um 'diesen' Kontext zu geben. – Li357

Antwort

2

Ich denke, Ihr Problem ist, dass combine ruft einfach die method1 Funktion (nicht this.method1, zum Beispiel), so this in this.property * 10 in diesem Anruf von method1 nicht gebunden ist, wie man erwartet und wird wahrscheinlich auf das globale Objekt gebunden .

Verwandte Themen