在JS中的构造函数对象中,如果它是在没有new关键字的情况下创建的,那么'this'变量是对窗口而不是对象的引用。尝试检测这个是一个特别明智的想法吗?
function MyObject ()
{
if (this === window) {
alert('[ERROR] Oopsy! You seem to have forgotten to use the "new" keyword.');
return;
}
// Continue with the constructor...
}
// Call the constructor without the new keyword
obj = MyObject()
答案 0 :(得分:8)
在省略关键字时强制使用 new 对象是相当常见的 -
function Group(O){
if(!(this instanceof Group)) return new Group(O);
if(!O || typeof O!= 'object') O= {};
for(var p in O){
if(O.hasOwnProperty(p)) this[p]= O[p];
}
}
答案 1 :(得分:0)
我在SO中找到了这个,最后一个答案使用了你的方法;
两种方式,在引擎盖下基本相同。你可以测试一下 这个范围是或者你可以测试this.constructor是什么。
但是被接受的人说没有可靠的方法来做到这一点;
How to detect if a function is called as constructor?
EDIT。
在书中Javascript Enlightment提到不一定是窗口而是父对象;
另一方面,如果您创建一个构造函数并调用它 如果不使用new关键字,则此值将引用 包含该函数的“父”对象。