javascript foo.call(object)与object.foo()

时间:2012-06-01 18:48:12

标签: javascript jquery

我正在查看jQuery source code,然后我看到他们使用foo.call(context)代替context.foo()
例如 - 假设this是他们使用的数组:

return slice.call( this );

而不是:

return this.slice();

有什么区别,这是做这些调用的首选方式(在性能方面)吗?

2 个答案:

答案 0 :(得分:6)

问题是“foo”实际上可能不是“上下文”的属性。在这种情况下,唯一真正的选择是使用.call()(或.apply(),视情况而定)。

如果你的对象的“foo”属性是一个函数,那么就没有理由使用.call()

答案 1 :(得分:2)

除了@Pointy的回答,成员函数的直接调用似乎比Class.prototype.foo快得多:

http://jsperf.com/javascript-foo-call-object-vs-object-foo