【发布时间】:2013-03-14 08:37:14
【问题描述】:
我在 stackoverflow 和 web 中搜索,无法获得正确的结果或解释这三种方法之间的位置差异。
据我了解,他们在执行function/method in different context. 时都做同样的事情
var google = {
makeBeer : function(arg1,arg2){
alert([arg1, arg2]);
}
}
google.makeBeer('water','soda');
这是我的google对象的正常功能。现在,当我在这里使用调用和绑定方法时,这是输出。
var google = {
makeBeer: function (arg1, arg2) {
alert([arg1, arg2]);
}
}
google.makeBeer('water', 'soda');
function yahoo() {}
var yah = new yahoo();
google.makeBeer.call(yah, 'pepsi', 'coke');
function msn() {
}
var msn = new msn();
google.makeBeer.call(msn, 'sprite', 'limca');
我仍然没有看到这样做的目的,我可以继续致电google.makeBeer three times with different arguments.
谁能在这方面给我更多启发。
【问题讨论】:
-
In 在您的示例中没有什么不同,因为
google.makeBeer没有使用this。当被调用为google.makeBeer(...);时,函数内部的this将引用google。当被称为google.makeBeer.call(yah, ...);时,this将引用yah。bind实际上并不执行函数,它创建一个新函数,其中this和可选的一些参数绑定到传递的参数。见developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/… 和developer.mozilla.org/en-US/docs/JavaScript/Reference/… -
我认为 DOM 方法
.call()和.apply()之间的主要区别在于可以传递的参数数量(我认为一个只允许一个,另一个允许更多)。我不确定对.bind()的引用是什么意思,但它通常指的是事件及其处理程序被“绑定”。
标签: javascript