如果我有功能:
function Thing( name_of_thing )
{
this.name = name_of_thing;
}
有没有办法知道是否通过以下方式调用:
var my_thing = new Thing( 'Something' ); // result: { name: "Something" }
与
var my_thing = Thing( 'Something' ); // result: undefined
答案 0 :(得分:3)
尝试这样的事情:
function Thing(nameOfThing) {
if (this == window) throw new Error("Must be constructed with new!");
this.name = nameOfThing;
}
var myThing = new Thing("Something"); // Thing {name: "Something"}
var myThing = Thing("Something"); // error
基本上我们将this
与全局window
对象进行比较。如果它们是相同的(因此==
),那么如果它们是相同的则抛出错误。
您还可以通过检查this
是Thing
的实例来解决问题:
function Thing(nameOfThing) {
if (!(this instanceof Thing)) throw new Error("Must be instance of Thing!");
this.name = nameOfThing;
}
这稍微好一些,因为它只允许Thing
的任何实例或Thing
子类的实例。
你记得记住这一点是个好主意,因为否则你将设置window
的属性 - 所以window.name
将是"Something"
!< / p>