Javascript 调用.apply()后,如何保持原始函数的此上下文?

Javascript 调用.apply()后,如何保持原始函数的此上下文?,javascript,function,Javascript,Function,我有一个接受函数作为参数的函数。我想在functionA中处理该函数的参数,并将其作为functionC返回。我发现我可以用.apply()实现这一点,但是functionB的原始上下文丢失了,取而代之的是functionA 比如说, var factory = { return { fnB: function() {} } }; fnA(fn) { return fnC(params) { var customparams = [para

我有一个接受函数作为参数的函数。我想在functionA中处理该函数的参数,并将其作为functionC返回。我发现我可以用.apply()实现这一点,但是functionB的原始上下文丢失了,取而代之的是functionA

比如说,

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