Javascript 在回调中为内部函数隐式绑定此函数(避免使用“this”)
好的,我找不到更好更清晰的标题,但基本上我有:Javascript 在回调中为内部函数隐式绑定此函数(避免使用“this”),javascript,Javascript,好的,我找不到更好更清晰的标题,但基本上我有: var obj = function () { return { hi: function (name) { console.log("HI! " + name); }, fun1: (function (cllb, name) { //WRONG!! I'm binding the callback not the hi function
var obj = function () {
return {
hi: function (name) {
console.log("HI! " + name);
},
fun1: (function (cllb, name) {
//WRONG!! I'm binding the callback not the hi function
var f = cllb.call(this, name)
}).bind(this)
}
}
我这样调用fun1
:
var q = new obj()
q.fun1(function () {
hi("paco")
})
注意我如何使用
hi(“paco”)
而不是this.hi(“paco”)
。我需要避免回调中的this
。我知道这不是最实用、最合乎逻辑的方式,但在我的实际代码中,原因更为明显。可以用Javascript实现吗?除非将hi
作为参数传递给回调函数,否则无法直接调用hi(…)
。JavaScript具有,并且hi
不在回调的范围内
是否可以用Javascript实现?”
答案很简单,不也许是你能得到的最接近的答案
function thing(){
this.fun1 = function(cb){
var b = 'this.'+cb();
var c = new Function(b);
c.call(this);
};
}
var t = new thing();
thing.fun1(function(){
return 'hi("paco");';
});
如果您运行类似于
obj.fun1(f,x)的函数,则不使用.bind(this)
然后这个fun1的内部是obj
这个取决于你调用函数的方式。你可能不应该使用new
,否则你需要一个构造函数。如果你提供了不使用这个的理由,你最好给我们看看你真正的代码。事实上,你总是需要要使用某种属性访问,hi
不是一个变量。可以使用this.hi()
或q.hi()
。您必须使用this
调用hi
是否可以返回?