我知道如果你有一些 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,那么这一切似乎只是额外的代码和开销。
我是不是漏掉了什么?还是我在其中看到这种模式的源代码只是“过度面向对象”?
最佳答案
似乎有很大的性能差异。使用
func(){
//code here, this.something
}
func.call(thatObject)
根据前几个测试,比使用慢大约 8 倍
func(that){
//code here, that.something
}
func(thatObject)
自己测试一下,JSPerf here
但归根结底,速度本身很少是我们使用代码的最重要因素。代码既是为人设计的,也是为计算机设计的,我们需要向两者清楚地传达我们的意图。使代码最干净的是最好的,只要可行,我们就应该遵循约定。我个人更喜欢这里的第二种选择,但我认为一般惯例是第一种。所以我认为你在大多数情况下都使用 call
,除非你需要尽可能快的代码或者约定发生变化。
关于javascript - 使用 .call 与在 JavaScript 中传递 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514363/