javascript - .apply 和 .call 有什么区别

标签 javascript jquery javascript-objects

<分区>

我发现自己经常将 jQuery 对象与常规 js 对象一起使用;我正在尝试弄清楚如何在适当的时候在我的脚本中更频繁地使用 .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

最佳答案

.apply 需要您将参数作为数组传递。

所以

myApp.hide.call(numbers, numbers.div)

应该和

一样
myApp.hide.apply(numbers, [numbers.div])

但是,在你的myApp.hide函数中,没有this,所以.call或者的第一个参数。 apply 可以是任何其他的,没关系。

关于javascript - .apply 和 .call 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190199/

相关文章:

javascript - firestore 1.0 不返回 Firestore 时间戳

javascript - 为 selenium webdriver 设置特定功能

jquery - 引号内的jQuery变量返回语法错误

javascript - 每 30 秒更改一次 iframe 源。

javascript - JavaScript 中的 Bogosort 函数循环

javascript - 如何设置加载动态内容的 onClick 属性?

javascript - JQuery 错误 : cannot call methods on dialog prior to initialization; attempted to call method 'close'

javascript - Titanium 移动 Controller 的问题

Javascript 字符串比较

javascript - __javascript 中的原型(prototype)对象