Javascript 调用.apply()后,如何保持原始函数的此上下文?
我有一个接受函数作为参数的函数。我想在functionA中处理该函数的参数,并将其作为functionC返回。我发现我可以用.apply()实现这一点,但是functionB的原始上下文丢失了,取而代之的是functionA 比如说,Javascript 调用.apply()后,如何保持原始函数的此上下文?,javascript,function,Javascript,Function,我有一个接受函数作为参数的函数。我想在functionA中处理该函数的参数,并将其作为functionC返回。我发现我可以用.apply()实现这一点,但是functionB的原始上下文丢失了,取而代之的是functionA 比如说, var factory = { return { fnB: function() {} } }; fnA(fn) { return fnC(params) { var customparams = [para
var factory = {
return {
fnB: function() {}
}
};
fnA(fn) {
return fnC(params) {
var customparams = [params, {something: else}]
return method.apply(null, customparams);
}
}
var load = fnA(factory.fnB);
load(params);
但是,当我执行load(params)时,我会丢失functionB的上下文。FunctionB定义为工厂中的方法。我该怎么办?谢谢 我将假设
方法
实际上是fn
,并且functionB
是分配给对象属性的函数,并且实际代码中不存在各种语法错误:
var obj = {
name: "foo",
functionB: function() {
console.log(this.name); // <== Using `this` to refer to `obj`
}
};
function functionA(fn) {
return function functionC(params) {
var customparams = [params, {something: "else"}];
return fn.apply(null, customparams);
};
}
var load = functionA(obj.functionB);
load("a", "b"); // Fails because `this` in the call to `functionB` isn't `obj`
var obj={
姓名:"富",,
函数B:函数(){
snippet.log(this.name);//
functionB
在哪里?方法是什么?为什么代码没有使用fn
?您是否知道customparams
正在沦为牺牲品?绑定它:load=function(factory.functionB.bind(factory))
。或者,给function
第二个上下文参数,或者在functionC
中使用this
而不是null
,并在从中获得functionB
的工厂上调用load
。这就解决了这个问题,谢谢!我曾想过在obj本身中使用bind,但没有这么大的可扩展性这是一个很好的方法。非常感谢!
var load = functionA(obj.functionB.bind(obj));
load("a", "b"); // Works