用函数和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();

 



posted @ 2012-03-13 11:50  老西  阅读(1049)  评论(0编辑  收藏  举报