gpt4 book ai didi

javascript - 为什么 JS 中的别名 'this' 如此容易出错?

转载 作者:数据小太阳 更新时间:2023-10-29 05:52:42 28 4
gpt4 key购买 nike

阅读 Principles of writing consistent, idiomatic JavaScript在标题为“this 的面孔”的部分中,它表明在 JavaScript 中为 this 设置别名“极易出错”。

我个人尽可能地尝试使用 _.bind()(或类似的东西),但是有人知道为什么别名 this 如此容易出错吗?

最佳答案

根据调用方式的不同,this 有四种含义。因此,必须注意跟踪正在使用哪个 this,我可以想到至少有 3/4 的 this 容易出现问题。

作为方法调用

obj.myFunc() 中,this 绑定(bind)到 obj

如果 myFunc 在回调中传递,这可能会很可怕,因为它会忘记它曾经是对象的一部分并被独立调用。参见例如What does 'var that = this;' mean in JavaScript?对于通常的解决方法。

作为独立函数调用

在普通的 myFunc() 中,this 绑定(bind)到全局对象。

作为构造函数调用

作为 new myFunc() 调用(非常不同!所有打算用 new 调用的函数都应该大写,因此看起来像一个伪类)。创建一个新对象,将其绑定(bind)到 this 并(可能)返回该对象。

当然,如果您删除 new,您将绑定(bind)到全局对象,这可能会破坏很多东西并使您的程序处于非常糟糕的状态。大写约定非常重要,让 JSLint (IIRC) 解决这个问题。

通过 apply(或 call)调用

调用为 myFunc.apply(obj, args),其中 this 绑定(bind)到 obj。请注意,这甚至具有安全隐患,因为任何调用者都可以将 this 替换为其自己的欺骗对象。

关于javascript - 为什么 JS 中的别名 'this' 如此容易出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15254718/

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