gpt4 book ai didi

javascript - 使用 .call 与在 JavaScript 中传递 "this"

转载 作者:行者123 更新时间:2023-11-30 17:43:50 24 4
gpt4 key购买 nike

我知道如果你有一些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com