2016-07-23 18 views
0

Ich habe vor einer Woche gerade angefangen, Javascript zu lernen, und ich bin in ein Stolperstein gelaufen. In dem angegebenen Link kann ich aus irgendeinem Grund die Funktion innerhalb des Objekts nicht aufrufen. Irgendwelche Ideen, was ich falsch mache? Jeder Rat wäre großartig.So rufen Sie eine Funktion in einem Objekt auf

Javascript code

+2

Versuchen Sie, nur mit 'this' statt' this.word' und Sie werden sehen, dass die Konsole Sie unterschiedliche Werte für 'this' gibt auf, wo Sie sind. –

+0

Diese Syntax sieht für mich aus. Als Sie die Funktion als Teil des Objekts definiert haben, haben Sie ihm bereits einen Namen gegeben ... 'bar'. Ich glaube nicht, dass "Test" auch da sein sollte. So etwas wie: 'bar: function() {...}' – David

+1

@David, die Syntax ist seltsam, stimme ich zu, aber es funktioniert: [fiddle] (https://jsfiddle.net/kv6bf76n/). –

Antwort

2

Sie rufen die Funktion, aber die Funktion nicht definiert ist, zurückkehrt. Seien Sie sich der Tatsache bewusst, dass this verschiedene Bedeutungen hat, die in anderem Zusammenhang genannt werden, in testObj, this == testObj, daher ist this.word undefined.

Vielleicht kann diese fiddle helfen.

0
var testObj = { 
    bar: function(){ 
console.log(this.word) 
} 
} 

Wenn Sie testObj.bar nennen Hier bezieht sich dies auf die TestObj und TestObj hat kein Eigentum Wort

var testObj = { 
    bar: function(){ 
console.log(this.word) 
}.bind(this) 
} 

Verwenden .bind (this) oder .bind (Fenster)

0

Weil Der Umfang hat sich geändert.

In JavaScript bezieht sich der Gültigkeitsbereich auf den aktuellen Kontext Ihres Codes. Bereiche können global oder lokal definiert werden. JavaScript-Umfang zu verstehen, ist der Schlüssel zum Schreiben von kugelsicherem Code und zu einem besseren Entwickler. Sie werden verstehen, wo auf Variablen/Funktionen zugegriffen werden kann, in der Lage sein, den Umfang des Code-Kontexts zu ändern und in der Lage sein, schneller und wartungsfreundlicher Code zu schreiben sowie viel schneller zu debuggen.

So ist der richtige Code ist:

var that = this; 
var testObject = { bar: function() { return that.word }} 

In Ihrer Lösung "dieses" ist "Fenster" Objekt. So können Sie auch diesen Code:

var testObject = { bar: function() { return window.word }} 
Verwandte Themen