了解功能借用:
函数借用使我们能够使用一个对象的方法并将其应用于另一个对象。这可以通过从一个对象调用一种方法来实现,但在方法中设置this
关键字以指向其他对象。它是通过使用.call()
,.apply()
或.bind()
来完成的,所有这些都存在于我们借用的方法上。
- 呼叫方法:
call()
方法用于调用具有指定值和分别提供的参数的函数。
functionName.call(thisArg, arg1, arg2, ...);
const person1 = {
name: 'Alice',
greet: function(greeting) {
console.log(`${greeting}, I'm ${this.name}.`);
},
};
const person2 = {
name: 'Bob',
};
person1.greet.call(person2, 'Hello');
// Output: Hello, I'm Bob.
- 应用方法:
apply()
方法与call()
相似,但是它以数组般的对象为第二个参数将参数传递给函数。
functionName.apply(thisArg, [arg1, arg2, ...]);
const person1 = {
name: 'Alice',
greet: function(greeting, age) {
console.log(`${greeting}, I'm ${this.name}, and I'm ${age} years old.`);
},
};
const person2 = {
name: 'Bob',
};
person1.greet.apply(person2, ['Hello', 30]);
// Output: Hello, I'm Bob, and I'm 30 years old.
- 绑定方法:
bind()
方法使用指定的该值和任何提供的初始参数创建了一个新功能。与立即执行该函数的call()
或apply()
不同,bind()返回一个可以稍后调用的新功能。
const newFunction = functionName.bind(thisArg, arg1, arg2, ...);
const person1 = {
name: 'Alice',
greet: function(greeting) {
console.log(`${greeting}, I'm ${this.name}.`);
},
};
const person2 = {
name: 'Bob',
};
const greetBob = person1.greet.bind(person2, 'Hi');
greetBob();
// Output: Hi, I'm Bob.