跳到主要内容

JavaScript 函数的 bind() 方法详解

bind()方法允许一个对象借用另一个对象的方法而无需复制。

示例

// 对象定义
const student1 = {
name: "Jack",
grade: "5",
introduction: function () {
console.log(this.name + "studies in grade" + this.grade + ".");
},
};

// 对象定义
const student2 = {
name: "Jimmy ",
grade: " 6",
};

// student2对象借用student1的introduction方法
let result = student1.introduction.bind(student2);

// 调用introduction()函数
result();

// 输出:
// Jimmy studies in grade 6.

bind()语法

bind()方法的语法是:

func.bind(thisArg, arg1, ...argN);

这里,func是一个函数。

bind()参数

bind()可以接受两个参数:

  • thisArg - 作为functhis参数提供的值。
  • arg1, ... argN(可选)- func内部参数的值。

注意: 如果未指定thisArg,执行范围的this将被视为thisArg

bind()返回值

  • 返回给定函数的副本,该副本具有指定的this值和初始参数(如果提供)。

示例1:使用bind()方法

// 对象定义
const student1 = {
name: "Jack",
grade: "5",
introduction: function () {
console.log(this.name + "studies in grade" + this.grade + ".");
},
};

// 对象定义
const student2 = {
name: "Jimmy ",
grade: " 6",
};

// student2对象借用student1的introduction方法
let result = student1.introduction.bind(student2);

// 调用result()函数
result(); // Jimmy studies in grade 6.

输出

Jimmy studies in grade 6.

在上述示例中,我们定义了两个对象student1和student2。

由于student2没有introduction()方法,我们使用bind()函数从student1那里借用它。

student1.introduction.bind(student2)返回introduction()的副本并将其赋值给result。

示例2:使用bind()方法并带有两个参数

// 对象定义
const student1 = {
name: "Jack",
introduction: function (score) {
console.log(this.name + "scored " + score + " in an exam.");
},
};

// 对象定义
const student2 = {
name: "Jimmy ",
};

// 传递两个参数student2和'95'
let result = student1.introduction.bind(student2, 95);

// 调用result()函数
result(); // Jimmy scored 95 in an exam.

输出

Jimmy scored 95 in an exam.

在上述示例中,我们在bind()中传递了两个参数thisArg和arg1。

student2对象作为this参数传递,95作为score参数的参数传递。

推荐阅读: JavaScript函数Function.call()