gpt4 book ai didi

javascript - 使用 function.apply(...) 时保留函数的作用域

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

考虑以下示例:

var funcToCall = function() {...}.bind(importantScope);

// some time later
var argsToUse = [...];
funcToCall.apply(someScope, argsToUse);

我想保留 funcToCall 的“importantScope”。然而,我需要使用 apply 来应用未知数量的参数。 “申请”要求我提供“someScope”。我不想更改范围,我只想将参数应用于函数并保留其范围。我该怎么做?

最佳答案

您可以将任何旧对象(包括 null)作为第一个参数传递给 apply() 调用,this 仍然是 importantScope.

function f() {
alert(this.foo);
}

var g = f.bind( { foo: "bar"} );

g(); // Alerts "bar"
g.apply(null, []); // Alerts "bar"

bind 方法创建一个新函数,其中 this 值保证是您作为参数传递给 bind 的对象> 打电话。无论这个新函数如何被调用,this 总是相同的。一个简单的实现看起来像这样(注意指定 ECMAScript 5 的实现,Prototype 中的实现不止于此,但这应该让您明白):

Function.prototype.bind = function(thisValue) {
var f = this;
return function() {
return f.apply(thisValue, arguments);
};
};

关于javascript - 使用 function.apply(...) 时保留函数的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630465/

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