问答题670/1593说说你对 new.target 的理解

难度:
2022-06-25 创建

参考答案:

new.target 属性是 JavaScript 中一个特殊的属性,它用于检测函数或构造函数是否是通过 new 运算符被调用的。这个属性在通过 new 运算符初始化的函数或构造方法中,会返回一个指向构造方法或函数的引用。如果函数不是通过 new 运算符被调用的,new.target 的值将是 undefined。 利用 new.target,我们可以编写代码来检查一个函数是否作为构造函数被 new 调用,从而确保函数的调用方式符合预期。例如,如果我们有一个函数,它应该总是作为构造函数被调用,那么我们可以在函数体内部使用 new.target 来抛出一个错误,如果它没有被以正确的方式调用。

1function Foo() { 2 if (!new.target) { 3 throw new Error("Foo() must be called with new"); 4 } 5 console.log("Foo instantiated with new"); 6} 7// 如果直接调用函数,会抛出错误 8try { 9 Foo(); 10} catch (error) { 11 console.log(error.message); // 输出: Foo() must be called with new 12} 13// 如果使用 new 运算符调用函数,则不会抛出错误 14try { 15 new Foo(); 16} catch (error) { 17 console.log(error.message); // 不会抛出错误 18}

在上述代码中,当 Foo() 函数被直接调用时,由于 new.targetundefined,因此会抛出一个错误,提示必须使用 new 运算符来调用 Foo()。而当使用 new 运算符调用时,new.target 指向 Foo 函数本身,因此不会抛出错误,而是执行了 console.log 语句。

最近更新时间:2024-08-10

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!