构造函数和普通函数的主要区别:
它们的用途和调用方式。构造函数通常用于创建和初始化对象,它们的名称通常以大写字母开头,并且当你使用new
关键字调用它们时,它们会返回一个新对象。普通函数则没有这些限制,它们可以执行任何任务,并且可以被调用而无需使用new
关键字。
new.target的作用:
new.target
是一个特殊的属性,它允许你检测一个函数或构造函数是否通过new
关键字被调用。如果通过new
调用了函数,new.target
将返回指向该函数的引用;如果没有通过new
调用,则返回undefined
。
下面是一个简单的例子来说明new.target
的用法:
function Person(name) {
if (new.target === Person) {
this.name = name;
} else {
throw new Error('必须通过new关键字调用Person');
}
}
let person1 = new Person('Alice'); // 正常工作
let person2 = Person('Bob'); // 抛出错误
在这个例子中,Person
函数检查new.target
是否指向Person
。如果是,它执行构造函数的代码;如果不是,它抛出一个错误。这样,你可以确保Person
只能通过new
关键字被正确调用。