下面这段代码是安全构造函数的写法,但在IE6/7/8中不能运行:
(function(){ var test=function(){ if(this === window) return new test(); } test.prototype.play = function(){ alert("Hello"); }; window.Test=test; })(); window.onload=function(){ Test().play(); };
改为:
(function(){ var test=function(){ if(this.constructor === window.constructor) return new test(); } test.prototype.play = function(){ alert("Hello"); }; window.Test=test; })(); window.onload=function(){ Test().play(); };
就可以了,请问第一种写法为什么不行呢?
this.constructor ===window.constructor貌似也不对,运行代码发现IE下两个constructor都是undefined。。
是的,现在只好改用:
(function(){ var test=function(){ if(!(this instanceof test)) return new test(); } test.prototype.play = function(){ alert("Hello"); }; window.Test=test; })(); window.onload=function(){ Test().play(); };