私が扱っているいくつかのコードのこの簡略化されたバージョンを作成しました。インスタンス化されたオブジェクトの参照を、このオブジェクトによって作成された別のオブジェクトに渡す方法を理解する必要があります。メインオブジェクト「self」への参照を2番目のオブジェクトに渡して、実際に関数を呼び出すことができません。うまくいけば、コードはそれをより明確にします:
var app = app || {};
(function (m, $, undefined) {
m.Counter = function () {
var self = this;
var pub = {};
pub.total = 0;
pub.add = function () {
pub.total++;
};
pub.subtract = function () {
pub.total--;
};
pub.status = function () {
console.log(pub.total);
};
pub.spawn = function () {
var sp = new app.modules.Obj(self);
return sp;
};
return pub;
};
m.Obj = function (counter) {
var pub = {};
pub.add = function () {
counter.add();
};
return pub;
};
}(app.modules = app.modules || {}));
var c = new app.modules.Counter();
c.add();
c.add();
c.add();
c.status();
d = c.spawn();
d.add();
c.status();
私が望んでいるのは、d.add() が c の合計をインクリメントすることです。したがって、最初の c.status() 呼び出しの出力は 3 になり、2 番目の c.status(); の出力は 4 になります。