Ich bekomme verwirrt auf eine JavaScript this
Referenzsituation.JavaScript dies bezieht sich auf Fenster anstelle von Objekt innerhalb der Funktion
Ich arbeite an einem Code, der Funktion innerhalb einer Objektmethode deklariere. (Der Grund besteht darin, Code innerhalb einer Objektmethode aufzuräumen, während die Funktionen für die Methode privat bleiben.)
Das folgende ist ein Experiment, um mein Problem zu reproduzieren.
fand ich, dass die this
innerhalb greeting
Funktion des statt Person Umfang Fenster Anwendungsbereich bezieht.
var person = {
nickname: "Makzan",
sayHi: function() {
console.log(this);
var greeting = function() {
console.log(this);
return "Aloha " + this.nickname;
}
console.log(greeting());
}
}
person.sayHi();
(gleicher Code in jsfiddle: http://jsfiddle.net/makzan/z5Zmm/)
Und das ist das Log-Ergebnis in Browser:
> Object
> Window
Aloha undefined
In JS, ich weiß, dass diese Referenz heikel ist. Und ich kann den Bereich ändern, indem ich .call
Methode verwende, um diesen Code zu arbeiten.
var greeting = (function() {
console.log(this);
return "Aloha " + this.nickname;
}).call(this);
Aber ich bin neugierig, warum standardmäßig die this
zu Fenster Rahmen innerhalb des Methode Gruß beziehen?
Vielen Dank im Voraus für Ihre Hilfe.
Es ist, weil 'greeting' genannt wird genannt bestimmt gebunden ohne Kontext. –
Danke an alle. Ich lerne mehr darüber, was "Kontext" jetzt bedeutet. – Makzan