我有以下幾點:如何在一個成員函數中引用一個對象?
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
其中this
勢必鄰。
在這裏,我想用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。 - 使用
function
定義class Ob
不直觀(至少在開始時)。
這就是爲什麼我試圖用對象字面量來定義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
可以綁定到任何東西)?
太棒了!就是我想要的! – numeric 2009-02-20 14:26:14
'self'已經是一個全局變量,比如'undefined'和'NaN'。請用另一個名字來減少混淆。 – some 2009-02-20 14:59:55