用函数和new两种方法创建类-同一个类
对于一个类:
1 function Class(){}
怎样既可以用Class()调用,也可以用new Class()调用,关键就在this,如下代码:
function Class(){
alert(this);
}
Class()调用会弹出DOMWindow对象,在IE6下是object。
new Class()调用会弹出Class对象,在IE6下是object。
所以解决方法如下:
function Class(){
if(this === window)return new Class();
/**
* some code...
*/
}
其实背后的逻辑是作用域的问题,当Class()调用时,其实是调用了window.Class(),所以this指向的window,而new Class()时由于new操作符,this指向Class。
这样你就可以创建一个类实现链式调用了,比如:
function $(selector){
if(this === window)return new $(selector);
/**
* some code...
*/
};
$("a").css().fadeIn();