私は 1 日の大半をモジュール パターンとその 'this' スコープについて読むことに費やしました。最終的に、私は問題の回避策を見つけましたが、より良い方法があると感じています。
実際のコードは 200 行を超えていますが、要約すると次のようになります。objA には、objB がコールバックによって呼び出したいメソッド (publicA) があります。物事を複雑にする詳細は、publicA が仕事をするために publicA_helper からの助けを必要とすることです。( http://jsfiddle.net/qwNb6/2/ )
var objA = function () {
var privateA = "found";
return {
publicA: function () {
console.log("privateA is " + this.publicA_helper());
},
publicA_helper: function () {
return privateA;
}
};
}();
var objB = function () {
return {
callback: function (callback) {
callback();
}
}
}();
objA.publicA(); // privateA is found
objB.callback(objA.publicA); // TypeError: Object [object global]
当然のことですが、呼び出し元のコンテキストが「this」の値に影響を与える傾向があることを理解しました。そのため、objA 内に「this」を保持する手段を追加しましたが、どれも機能していないようです。私は
var objA = (){}.call({})
、設定を試してみましたvar self = this;
(それに応じて呼び出しself.publicA_helper()
ます)。運がない。
var self;
最終的に、パブリック メソッドとともにプライベート変数を追加しました。
init: function() {self = this;},
...そして、objA.init();
に渡す前に必ず呼び出すobjA.publicA
ことobjB.callback
で、実際に機能します。
これを行うためのより良い方法があるという感覚の巨大さを強調することはできません. 私は何が欠けていますか?