ECMAScript 2017 中的 NewTarget 和 Caller
在 ECMAScript 2017 中,新增了两个特殊的内建属性:NewTarget 和 Caller,这两个属性可以让开发者更好地理解和调试 JavaScript 代码。本篇文章将详细介绍这两个属性的用法、作用和示例。如果您想更好地理解 JavaScript 中的 NewTarget 和 Caller,请继续阅读本文。
NewTarget
在 JavaScript 中,this 指向未定义时,通常会指向全局对象。但是在构造函数中,this 指向新对象。在 ECMAScript 2015 中,引入了关键字 new,可以用来声明一个新对象。NewTarget 就是用来获取 new 操作符的目标对象的内建属性。当我们在构造函数中使用 new 关键字时,NewTarget 就会被自动赋值为当前构造函数。
下面是一个示例代码:
----- --- - ------------- - ----------------------------- - - ----- --------------- ------- --- - ------------- - -------- - - --- ------ -- -- ----- --- ------------------ -- -- -----------------
在上面的代码中,我们定义了一个 Dog 类和一个 GoldenRetriever 类,它们都继承自 Dog。在 Dog 的构造函数中,我们使用了 new.target 来输出当前构造函数的名称,这里会输出 "Dog" 或 "GoldenRetriever"。
Caller
Caller 是一个 readonly 的内建属性,用来获取当前函数调用的函数对象。也就是说,Caller 返回值就是当前函数的拥有者。
下面是一个示例代码:
-------- ----------- - ------------ - -------- ----------- - ------------------------------ - ------------ -- -- ------------ - ------------ --
在上面的代码中,我们定义了一个 outerFunc 和一个 innerFunc 函数。在 outerFunc 中,我们调用了 innerFunc 函数,并且在 innerFunc 函数中,我们使用了 caller 属性来获取外部函数的引用。
需要注意的是,在严格模式下,将无法获取 caller 属性值。
结论
NewTarget 和 Caller 属性虽然不是经常使用的属性,但是在一些复杂情况下,它们可以让我们更加方便地调试代码。在日常开发中,我们也可以通过学习这两个属性,更好地理解 JavaScript 的内部机制,提高代码编写的效率和质量。
希望您通过本篇文章的学习,对 NewTarget 和 Caller 属性有了更深入的了解。如果您有什么疑问或者需要更多的帮助,请随时在评论区中留言,我们会尽快为您解答。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670d9bbb5f551281025db19b