gpt4 book ai didi

javascript - func.bind(thing)(arg) 与 func.bind(thing, arg)

转载 作者:行者123 更新时间:2023-11-28 08:24:03 26 4
gpt4 key购买 nike

将事物绑定(bind)到函数和像这样调用它之间有区别

func.bind(thing)(arg);

并通过绑定(bind)来完成

func.bind(thing, arg);

?我一直在做前者并且一直有效。我相信这是同一件事,但我可能是错的..

最佳答案

假设您有一个构造函数及其对象,如下所示

function Arith(operand1) {
this.operand1 = operand1;
this.adder = function(operand2) {
return this.operand1 + operand2;
}
}

var arith = new Arith(5);

现在,为了演示目的,让我们创建另一个像这样调用的函数

invoker(arith.adder, arith);

现在,invoker函数用您在问题中提到的两种不同方式调用该函数

function invoker(func, thisArg) {
console.log(func.bind(thisArg)(6)); // 11
console.log(func.bind(thisArg, 6)()); // 11
console.log(func.bind(thisArg)()); // NaN
}

所以,当你说func.bind(thisArg)时您正在创建一个绑定(bind)到 thisArg 的函数你用 6 来调用它作为参数。大致相当于

(function(operand2) {
thisArg.func(operand2);
}(6))

但是当你说func.bind(thisArg, 6)时您正在创建一个绑定(bind)到 thisArg 的函数并且您还传递了调用时要传递给该函数的第一个参数。所以,你可以使用Function.prototype.bind像这样做partial application of a function 。大致相当于

(function() {
thisArg.func(6);
}())

在最后一种情况下,NaN被返回是因为我们没有传递 operand2 的值的adder函数,所以默认 undefined被用来代替。添加undefined一个数字将是 NaN在 JavaScript 中。大致相当于

(function() {
thisArg.func();
}())

关于javascript - func.bind(thing)(arg) 与 func.bind(thing, arg),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640230/

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