我发现自己经常使用带有常规 js 对象的 jQuery 对象;我试图弄清楚如何在适当的时候在我的脚本中更频繁地使用 .call 和 .apply 。我一直在测试代码,看看它是如何工作的。
但是,当我在我知道有 jQuery 的网站上的 firebug 中运行下面的代码(实际上只是隐藏了页面上的所有 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