参考答案:
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.target
是 undefined
,因此会抛出一个错误,提示必须使用 new
运算符来调用 Foo()
。而当使用 new
运算符调用时,new.target
指向 Foo
函数本身,因此不会抛出错误,而是执行了 console.log
语句。
最近更新时间:2024-08-10