我有以下内容:
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)
调用fn
wherethis
绑定到 o。
在 HERE,我想用来this
访问 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
usingfunction
并不直观(至少在开始时)。
这就是为什么我试图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
可以根据上下文绑定到任何东西)?