我发现自己经常使用带有常规js对象的jQuery对象;我试图弄清楚如何在适当的时候更经常地在脚本中使用.call和.apply。我一直在测试代码,看看它是如何工作的。.apply和.call之间的区别是什么
但是,当我在网站上的firebug中运行我的代码(基本上只隐藏页面上的所有div)时,我知道jQuery有不同的结果;我想知道,如果它的jQuery的版本或者是这段代码有“马车”我破译为什么总是.CALL工作,但。适用不认为这将是各地根据下面的代码
var myApp = {} // instantiate an empty objct
myApp.hide = function (whatever) {
that = whatever
$(that).hide()
}
var Numbers = function (object) {
this.object = object;
}
Numbers.prototype.div = $('div');
var numbers = new Numbers();
numbers.div
myApp.hide.call(numbers, numbers.div)
myApp.hide.apply(numbers, numbers.div)
其他方式
当我使用.call或.apply萤火虫代码时,根据网站的不同,我得到不同的结果。每个有jquery .call的网站都可以使用,但对于jQuery.com和twitter等网站,它们都可以使用.apply和.call,但其他网站只能使用。纽约时报和Netflix .call的作品 - 我猜这是jQuery导致的差异,但有点困惑,因为numbers.div总是返回页面上的所有div元素的数组,所以我会认为这将始终工作。任何的解释是赞赏,因为我仍然抓.CALL和。适用的概念 - 我始终引用道格拉斯Crockford的书,但他如实不会进入太多的细节有关。适用和.CALL
感谢xdazz但它为什么在一些网站工作,但不是别人这让我困惑,为什么.CALL工作,如果它返回一个数组的话 - 不.CALL还使用数组作为地方只。适用与阵列一起使用的优点是使用一个在另一个 –
。apply将数组作为第二个参数,并将该数组中的所有内容作为参数传递给该函数。 .call另一方面将第二个参数和其后的所有参数作为参数传递给函数。 –
@JamesDaly不,只是检查签名,'foo.call(obj,param1,param2,...)'vs'foo.apply(obj,[param1,param2,...])' – xdazz