【发布时间】:2013-12-11 19:24:05
【问题描述】:
我知道,如果你有一些 javascript 函数并且你想调用它,以便在其中使用 this 不会引用直接调用它的对象,你可以使用 func.call(thatObject,param,and,more,params...)。
但假设你是func 的作者,而 func 的唯一用途是通过 func.call,
你为什么不把它定义为:
function func(that,param,and,more,params...) {
//and in here use *that* and not *this*
}
是的,它看起来不那么“酷”,因为它不是对象的方法, 但是,嘿,如果 func 的唯一用途是通过 func.call,这一切似乎都只是额外的代码和开销。
我在这里遗漏了什么吗?还是我在其中看到这种模式的源代码只是“过度 OOed”?
【问题讨论】:
-
为什么这被标记为“性能”? “优化”子问题在哪里?
-
@Tomalak,因为可能存在性能差异,一个是调用一个额外的函数来获取正确的范围,而另一个是发送一个带有指向对象的指针的变量。其实你有130k+rep,我为什么要和你争论……
-
@RustyToms:那将是过早的优化。带有性能标签的唯一有效问题是包含分析器报告的问题。
-
直接调用函数和通过
.call()或.apply()调用函数没有性能差异。为什么你这么想?你量过吗?有关系吗?你确定你真的对性能影响感兴趣,或者你真的在问为什么.call()/.apply()首先存在? -
@ABFORCE:所有 JavaScript 函数可以使用
call和apply调用。它是基本的语言特性之一。
标签: javascript performance oop optimization