第12天:借用功能
#javascript #100daysofcode #day12

了解功能借用:

函数借用使我们能够使用一个对象的方法并将其应用于另一个对象。这可以通过从一个对象调用一种方法来实现,但在方法中设置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.