调用你的代码有两种方式:
方式一:var t=obj();
方式二:var t=new obj();
在方式一中this是指向window的,方式二中this是指向obj的实例,所以如果this===window就可以判断是用方式一调用的。
这就是安全的构造函数用法,目地是让两种调用方式(用不用new)都可以。
不过你的代码在IE下可能会有问题,建议用下面的代码更好:
var obj=function(){ if(!(this instanceof obj)){return new obj();} }
恢常感谢,我正是在研究你分享的那个用原生js写的缓动图片应用,没想到你就来了!
@高明无思: 呵呵,我去把代码改一下
@artwl: 真热心,那我等着看了
@高明无思: 已经改了
@artwl: 速度!
判断当前对象是不是window
根据你方法被调用者的区别,this会不一样。这里有个function context 的概念,就是this的指向。这里就是判断该方法的调用者是不是默认的window对象;
===就是指向同一对象的意思,引用指向的是同一个对象才返回true,==是值相等
var obj=function(){
if(this===window){return new obj();}
}
就楼主这段代码,这个this对象就是window,