私は次のものを持っています:
var o = {f: function(fn) {
fn.call(o);
}};
var ob = {f: function() {
o.f(function() {
this.x = 2; //HERE: how can this reference ob?
//ob.x = 2;
});
}};
ob.f();
ob.x; // undefined
o.f(fn)
o にバインドされているfn
whereを呼び出します。this
this
HERE では、 ob にアクセスするために使用したいと思います。ただし、ob.f
が呼び出されると、this
にバインドされo
ます。JQueryはこのように機能すると思います。例えば:
$(...).blah(function() {
this // this is bound to $(...) jquery object.
...
};
私が今していることは次のとおりです。
var Ob = function() {
var self = this;
self.f = function() {
o.f(function() { self.x = 2; };
};
};
var ob = new Ob();
ob.f();
ob.x; // 2
しかし、文体上の理由から、上記は好きではありません。
- 演算子を使用すると、
new
あまりにも古典的な OOP のように聞こえます。 class Ob
usingの定義function
は直感的ではありません (少なくとも最初は)。
ob
そのため、オブジェクト リテラルで定義しようとしています。しかし、 以外のオブジェクトob
に設定するメソッド呼び出しを使用する関数でオブジェクトを参照する方法が見つかりません。this
ob
次のようなことができます:
var ob = {f: function() {
o.f(function() {
self.x = 2;
});
}};
var self = ob;
ob.f();
ob.x;
しかし、上記の因数分解の方法がわかりません。私は試した:
function obj(o) {
return function() {
var self = o;
return o;
}();
}
var ob = obj({f: function() {
o.f(function() {
self.x = 2;
});
}});
ob.f();
ob.x;// ReferenceError: self is not defined
それで、オブジェクト内の関数でオブジェクトを確実に参照する方法はありますか(this
コンテキストに応じて何にでもバインドできます)?