如何将'this'与函数一起传递?

Thi*_*ais 3 javascript

我想将一些函数调用从一个对象委托给另一个对象:

objA.feature = objA.component.feature;
Run Code Online (Sandbox Code Playgroud)

(假设feature在objA和其组件中都应该是一个函数)

但这显然不起作用,因为this从函数中剥离的引用在被调用时最终成为一个完全不同的对象(它实际上是objA代替objB.component).

你需要写这样的东西才能使它工作:

objA.feature = function() {
    objA.component.feature.apply(objA.component, arguments);
};
Run Code Online (Sandbox Code Playgroud)

是否有更短(惯用)的方式来做到这一点?

Poi*_*nty 5

在较新的运行时中,Function函数原型上有一个名为"bind"的函数:

var newFunc = someFunc.bind(somethingThatShouldBeThis);
Run Code Online (Sandbox Code Playgroud)

this在调用"newFunc"时引用"somethingThatShouldBeThis".

您可以从函数库中窃取代码,以在缺少本机库的环境中提供"绑定"功能.

编辑 - 这是功能的代码:

Function.prototype.bind = function(object/*, args...*/) {
    var fn = this;
    var args = Array.slice(arguments, 1);
    return function() {
        return fn.apply(object, args.concat(Array.slice(arguments, 0)));
    }
}
Run Code Online (Sandbox Code Playgroud)

很简单,嗯?它只返回一个函数,在调用时,它将第一个参数作为函数调用,并传递你传入的任何参数到结果(也就是上面例子中的"newFunc").主要的皱纹是,这个还可以节省原来传递的额外参数,这有时可以很方便.