顶部的 func bike() 是否已被底部的另一个函数覆盖
Does the func bike () at the top has been overriden by another function at the bottom
var bike = function() {
console.log(this.name);
}
var name = "Ninja";
var obj1 = { name: "Pulsar" };
var obj2 = { name: "Gixxer" };
var originalBikeFun = bike;
bike = function() {
originalBikeFun.call(obj1);
};
bike(); // "Pulsar"
bike.call(obj2); // "Pulsar"
我需要解释,因为我听不懂。当我为她分配 originalBikeFun 时,顶部的功能(即自行车)是否被覆盖。这是如何运作的? (顺便说一句,我只复制mdn提供的例子)#javascript
让我逐步解释您的代码片段中发生了什么:
- 您声明变量
bike
并将其赋值给它 reference 此函数:
function() {
console.log(this.name);
}
- 您声明变量
originalBikeFun
并将 reference 分配给上面提到的函数。此时,您有两个变量 bike
和 originalBikeFun
,它们仅指向存储函数的内存中的一个区域。
- 您将 (取消引用) 分配给
bike
变量这个新函数:
function() {
originalBikeFun.call(obj1);
}
此刻你有变量bike
指向这个函数:
function() {
originalBikeFun.call(obj1);
}
和变量 originalBikeFun
指向先前分配的函数:
function() {
console.log(this.name);
}
- 当您调用
bike
函数时,这些代码行将执行:
a) originalBikeFun.call(obj1);
b) console.log(this.name);
所以这次调用的结果是"Pulsar"。
- 当您调用
bike.call(obj2)
时,与前一个函数调用的不同之处在于您只需将 obj2
作为 this
指针传递,但是因为在函数 bike
中您只有一个调用重新分配 this
指针,所以没有区别。
var bike = function() {
console.log(this.name);
}
var name = "Ninja";
var obj1 = { name: "Pulsar" };
var obj2 = { name: "Gixxer" };
var originalBikeFun = bike;
bike = function() {
originalBikeFun.call(obj1);
};
bike(); // "Pulsar"
bike.call(obj2); // "Pulsar"
我需要解释,因为我听不懂。当我为她分配 originalBikeFun 时,顶部的功能(即自行车)是否被覆盖。这是如何运作的? (顺便说一句,我只复制mdn提供的例子)#javascript
让我逐步解释您的代码片段中发生了什么:
- 您声明变量
bike
并将其赋值给它 reference 此函数:
function() {
console.log(this.name);
}
- 您声明变量
originalBikeFun
并将 reference 分配给上面提到的函数。此时,您有两个变量bike
和originalBikeFun
,它们仅指向存储函数的内存中的一个区域。 - 您将 (取消引用) 分配给
bike
变量这个新函数:
function() {
originalBikeFun.call(obj1);
}
此刻你有变量bike
指向这个函数:
function() {
originalBikeFun.call(obj1);
}
和变量 originalBikeFun
指向先前分配的函数:
function() {
console.log(this.name);
}
- 当您调用
bike
函数时,这些代码行将执行:
a) originalBikeFun.call(obj1);
b) console.log(this.name);
所以这次调用的结果是"Pulsar"。
- 当您调用
bike.call(obj2)
时,与前一个函数调用的不同之处在于您只需将obj2
作为this
指针传递,但是因为在函数bike
中您只有一个调用重新分配this
指针,所以没有区别。