JavaScript call、apply 和 bind 的区别

本文介绍了JavaScript中改变函数上下文的方法,包括function.call(),它允许按顺序传递参数,function.apply(),它接受参数数组,以及bind(),它创建绑定特定上下文的新函数,适用于事件处理和柯里化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[JavaScript 中的 function.call() 方法]

function.call() 方法调用该函数并允许你使用逗号一次发送一个参数。这里提到的例子,this 指的是 person 对象,而 this.nameworker1worker2 的名称。

例子:

let worker1 = { name: 'Oli', email: 'oli@gmail.com' };
let worker2 = { name: 'Kp', email: 'kp@hotmail.com' };

function invite(text) {
    console.log(`${text} ${this.name}`);
}
invite.call(worker1, 'Hello Upwork');
invite.call(worker2, 'Hello Upwork');

输出:

"Hello Upwork Oli"
"Hello Upwork Kp"

[运行代码]

[JavaScript 中的 function.apply() 方法]

你可以使用 function.apply() 方法调用具有提供的 this 值和作为数组提供的参数的函数。apply()call() 方法相似,但不是单独的参数,而是将函数的参数作为数组。

例子:

let worker1 = { name: 'Oli', email: 'oli@gmail.com' };
let worker2 = { name: 'Kp', email: 'kp@hotmail.com' };
function invite(text, text2) {
   console.log(`${text} ${this.name}, ${text2}`);
}
invite.apply(worker1, ['Hello', 'How are you?']);
invite.apply(worker2, ['Hello', 'How are you?']);

输出:

"Hello Oli, How are you?"
"Hello Kp, How are you?"

[运行代码]

[JavaScript 中的 bind() 方法]

bind() 方法创建了一个新函数,该函数接受此数组和任意数量的参数。当你想稍后使用特定上下文(例如事件)调用函数时,请使用它。

例子:

let worker1 = { name: 'Oli', email: 'leo@gmail.com' };
let worker2 = { name: 'Kp', email: 'nat@hotmail.com' };
function invite(text) {
   console.log(`${text} ${this.name}`);
}
let helloOli = invite.bind(worker1);
let helloKp = invite.bind(worker2);
helloOli('Hello');
helloKp('Hello');

输出:

"Hello Oli"
"Hello Kp"

[运行代码

以下示例是 Bind 实现。

例子:

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

callapply 是可以互换的。你可以选择是数组还是逗号分隔的参数列表更方便。Bind 和其他的不一样。

它每次都返回一个新函数。如示例所示,我们可以使用 Bind 来柯里化函数。

我们可以从一个简单的 hello 操作中创建一个 "helloOli""helloKp"。当我们不知道它们何时会被触发但它们将在什么上下文中时,它可以用于事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柴没吃饱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值