Javascript中是否有任何方法可以强制开发人员使用new
关键字创建新对象?
我知道每次执行此操作时javascript都会创建一个新对象:
var module=function(){}
var module = new module();
答案 0 :(得分:5)
您可以检查当前this
对象是当前构造函数的实例,如下所示
function Person(name) {
if (!(this instanceof Person)) {
return new Person(name);
}
this.name = name;
}
然后,您可以检查在没有new
的情况下创建的对象是否为Person
类型,如此
console.log(Person("thefourtheye") instanceof Person);
# true
或者,如果您希望开发人员明确使用new
,那么您可以像Quentin建议的那样抛出错误,就像这样
function Person(name) {
if (!(this instanceof Person)) {
throw new Error("Person should be created with `new`")
}
this.name = name;
}
Person("thefourtheye");
将给出
/home/thefourtheye/Desktop/Test.js:3
throw new Error("Person should be created with `new`")
^
Error: Person should be created with `new`
at Person (/home/thefourtheye/Desktop/Test.js:3:15)
答案 1 :(得分:0)
在 ECMAScript 6 中,由于new
,您可以检查new.target
关键字的使用情况。除IE之外的所有浏览器均支持。
通过
new.target
属性,您可以检测是否使用new运算符调用了函数或构造函数。 在用new运算符实例化的构造函数和函数中,new.target返回对构造函数或函数的引用。在正常的函数调用中,new.target是未定义的。
Developer Mozilla documentation
看看下面的例子:
function myconstructor() {
if (!new.target) throw new Error('Constructor must be called using "new" keyword');
return this;
}
let a = new myconstructor(); // OK
let b = myconstructor(); // ERROR