我在一个对象的函数内部,我需要调用一个外部函数并将一个函数的引用传递给参数。最后一个函数参数多次使用关键字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);
};
但我也觉得它很乱。
我认为有更好的方法,我没有看到它!提前谢谢!
答案 0 :(得分:2)
如果您使用的是最近的浏览器并且使用Function.bind
,还有另外一个选项可供您使用。
这允许您创建已绑定到特定范围的函数。换句话说,它允许您在该函数内定义this
将是什么。因此,你可以这样做。
MyObj.prototype.doSomething= function(){
externalFunction(this.someVar, this.internalFunc.bind(this, data));
};
按照上面的链接滚动到底部,查看有关浏览器支持的信息。
实际上,还有另一种选择,即使用众多库中的一个库和框架。任何值得它的盐将有bind
,hitch
,proxy
或其他可用的。但是,所有这些都在完成本地JS方法,但它们通常提供有用的附加功能,使这种技术更有价值。
答案 1 :(得分:1)