我经常在使用jQuery对象和常规js对象时遇到问题; 我正在尝试找出如何在适当时使用.call和.apply的方法。 我一直在测试代码以查看它实际上的作用。
但是,当我在已知具有jQuery的网站上运行下面的代码(其基本上只隐藏页面上的所有div)时,会得到各种结果; 我想知道这是否与jQuery版本相关,还是这段代码仅仅是“有缺陷”的。我要破解为什么.call总是有效,而.apply却不起作用,尽管根据下面的代码应该是相反的。
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和.apply的概念 - 我总是参考Douglas Crockford的书,但他实际上并没有详细介绍.apply和.call。
foo.call(obj, param1, param2, ...)
和foo.apply(obj, [param1, param2, ...])
。 - xdazz