【发布时间】:2013-01-05 22:15:17
【问题描述】:
我在一个对象的函数内部,我需要调用一个外部函数并将对函数的引用作为参数传递。最后一个函数参数多次使用关键字this,所以我需要将范围限定在我的对象中。我通过这样做解决了这个问题:
MyObj.prototype.internalFunc= function(data){
this.doSomethingWithReturnedData(data);
};
MyObj.prototype.doSomething= function(){
var $this = this;
externalFunction(this.someVar, function(data){ $this.internalFunc(data); });
};
var objInst = new MyObj();
objInst.doSomething();
我想知道是否有办法避免这种混乱的var $this = this 事情。
我也想:
//... (same as before)
MyObj.prototype.doSomething= function(){
var $this = this;
externalFunction(this.someVar, this.internalFunc, this);
};
//... (same as before)
与
function externalFunction(arg1, cbfunc, thisref){
//bla bla things
cbfunc.call(thisref, blablaData);
};
但我也觉得很乱。
我认为有更好的方法,但我没有看到!提前致谢!
【问题讨论】:
-
通过将
this引用分配给局部范围变量来保留它就可以了 -
您已经确定了您的两个选择。没有其他选择。
-
是的,为
this使用局部变量(在JS 中通常称为变量名that)很常见。此外,您还有使用绑定方法的包装库,例如下划线。见underscorejs.org/#bind -
@ic3b3rg:这是不正确的。请参阅下面的答案。
-
@Dancrumb 对,你是……很高兴知道。
标签: javascript object callback