函数借用是从对象中借用函数而不是重新定义它;但我为什么要这么做。我们可以有一个通用函数,对象可以进一步使用它们。更准确地说;当我可以像代码#2 那样编写代码时,我什么时候会使用代码#1:
代码#1
let car1 = {
speed: 80,
getSpeed: function () {
return this.speed;
},
};
let car2 = {
speed: 60,
};
console.log(car1.getSpeed());
console.log(car1.getSpeed.call(car2));
Run Code Online (Sandbox Code Playgroud)
代码#2
function getSpeed() {
return this.speed;
}
let car1 = {
speed: 80,
}
let car2 = {
speed: 60,
}
console.log(getSpeed.call(car1));
console.log(getSpeed.call(car2));
Run Code Online (Sandbox Code Playgroud)
当您已经为对象定义了方法(直接或通过原型链),并且您希望能够将它与未定义该方法的类似对象一起使用时,请使用函数借用。
您的代码 #1 就是这种情况 - 该方法不是使用原型继承或类,而是getSpeed()直接在car1. car2您可以借用中的代码,而不是重复 中的代码car1。
通常你不会从头开始以这种方式设计东西。您要么使用代码#2 中的普通函数,要么创建car1并car2继承相同的原型。
函数借用通常只是初始设计不佳的一种解决方法。你可以在类似的代码中看到它
nodes = document.getElementsByClassName("foo");
result = [].prototype.map.call(nodes, someFunction);
Run Code Online (Sandbox Code Playgroud)
因为NodeList原型没有自己的map()功能。