JavaScriptthis
参照の状況で混乱します。
オブジェクトメソッド内で関数を宣言するコードに取り組んでいます。(その理由は、関数をメソッドに対してプライベートに保ちながら、オブジェクト メソッド内のコードを整理するためです。)
以下は、私の問題を再現するための実験です。
this
insidegreeting
関数がpersonスコープではなくwindowスコープを参照していることがわかりました。
var person = {
nickname: "Makzan",
sayHi: function() {
console.log(this);
var greeting = function() {
console.log(this);
return "Aloha " + this.nickname;
}
console.log(greeting());
}
}
person.sayHi();
(jsfiddle の同じコード: http://jsfiddle.net/makzan/z5Zmm/ )
そして、これはブラウザのログ結果です:
> Object
> Window
Aloha undefined
JS では、この参照がトリッキーであることはわかっています。メソッドを使用してスコープを変更し、.call
このコードを機能させることができます。
var greeting = (function() {
console.log(this);
return "Aloha " + this.nickname;
}).call(this);
ただし、デフォルトでグリーティングメソッド内のウィンドウスコープをthis
参照する理由を知りたいです。
ご協力いただきありがとうございます。