声明了一个构造函数如下
function Person(name){
this.name = name
}
调用的话可以有两种方式:
- 使用
new
关键字实例化调用var p = new Person('keke')
- 作为普通函数直接调用
var p = Person('keke')
那怎么禁止第二种调用的方式
如果构造函数不是通过new
命令或Reflect.construct()
调用的,new.target
会返回undefined
,因此这个属性可以用来确定构造函数是怎么调用的。
function Person(name){
if(new.target){
this.name = name
}else{
throw('error')
}
}