gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:25 27 4
gpt4 key购买 nike

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

objA.feature = objA.component.feature;

(假设 feature 应该是 objA 及其组件中的函数)

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

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

objA.feature = function() {
objA.component.feature.apply(objA.component, arguments);
};

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

最佳答案

有一个函数叫做 "bind"在较新的运行时中的函数原型(prototype)上:

var newFunc = someFunc.bind(somethingThatShouldBeThis);

将在调用“newFunc”时使 this 引用“somethingThatShouldBeThis”。

你可以从类似 Functional 的地方窃取代码库在缺少 native 功能的环境中提供“绑定(bind)”功能。

编辑 — 这是来自 Functional 的代码:

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)));
}
}

很简单,嗯?它只是返回一个函数给你,当调用时,将调用第一个参数作为函数,并将你传递给结果的任何参数传递给结果(即上面示例中的“newFunc”)。主要的问题在于,它还保存了最初传入的额外参数,这有时会很方便。

关于javascript - 如何将 'this' 与函数一起传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com