"Javascript - The Good Parts"の実例です。JavaScriptの関数呼び出しパターンスコープのルール
function add(x, y){ return x + y};
var myObject = {
value: 0,
increment: function (inc) {
this.value += typeof inc === 'number' ? inc : 1;
}
};
myObject.increment(2);
document.writeln(myObject.value);
myObject.double = function () {
var that = this; // Workaround.
var helper = function () {
that.value = add(that.value, that.value)
};
helper(); // Invoke helper as a function.
};
myObject.double();
document.writeln(myObject.value); // 4
機能呼び出しパターンでは、 'this'オブジェクトはグローバル参照を持ちます。しかし、私は完全に理解することはできませんボンネット下に述べた回避策の: -
var that = this; // Workaround.
我々はこれを行う場合は、私たちは「は」から「この」への参照をコピーしていませんか?すなわち 'それ'は 'this'と同じグローバルスコープに保持されますか?これは内部的にどのように機能しますか?
+1 – sojin
また、前述の(Javascript The Good Parts)の前項では、The Method Invocation Patternについて詳しく説明しています。関数がオブジェクトのプロパティとして格納されているときは、それは方法です。 'myObject.double = function(){...};'はあなたのMethod Invocation Patternですので、その中に 'this'があると' myObject' –
もう一つ注目すべきことは、提供された例は 'Function Invocation Pattern'に'内部関数 'を使用しています。ロジックを説明するためのより簡単な例を作成しました。http://jsbin.com/ciriwabeliwi/1/edit?js,consoleを参照してください。最後に、この本で提供される例は、http://jsbin.com/roheyekonabe/1/edit?js,consoleに相当します。 –