javascript foo.call(object) vs. object.foo()

javascript foo.call(object) vs. object.foo()

本文关键字:object foo vs call javascript      更新时间:2023-09-26

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

return slice.call( this );

而不是:

return this.slice();

有什么区别,是执行这些调用的首选方式(就性能而言)吗?

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

如果您确实有一个具有"foo"属性的对象,则该对象是一个函数,那么就没有真正的理由使用 .call()

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

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