技术总奸

JavaScript对象

以下对js对象的声明都是合法的,理解了它们,你会都js的对象类型有更深体会。

  • function MyClass(){}
    var obj = new MyClass();
    alert(typeof obj); //result: object
    alert(obj.constructor); //result: function MyClass(){}
    alert(typeof obj.constructor); //result: function
  • function MyClass(){}
    var obj = new (MyClass)();
    alert(typeof obj); //result: object
    alert(obj.constructor); //result: function MyClass(){}
    alert(typeof obj.constructor); //result: function
    //区别只在红色字体处,new操作符后跟对象的构造函数名称可以用括号括起来,然后又是括号,括号中可有参数,如果参数为零的话,后一个括号是可以省略的,即var obj = new MyClass. 在这个例子里,构造函数名称用括号括起来没有实际意义,但在下面的例子中就不同了,
  • var obj = new (function(){})();
    alert(typeof obj);// object
    alert(obj.constructor);//(function(){})
    alert(typeof obj.constructor);//function
    //和上例大致相同,区别在红色处采用了匿名函数,括着红色字体的括号也是可以省略的但,这里加上,会使代码更易读些。其实红色区域放置任何typeof为function的对象都可以,所以
  • var obj = new (new Function())();
    alert(typeof obj);// object
    alert(obj.constructor);//function anonymous(){}
    alert(typeof obj.constructor);//function
    //或者
  • function MyClass(){}
    var o = new MyClass();
    var obj = new o.constructor();
    //都是合法的
    //下面的代码能让你看到括号的作用
  • (
         obj = {
            init:function(){ alert("message"); }
        }
    ).init(); // result: message

posted on 2010-01-01 00:00  阿福  阅读(114)  评论(0编辑  收藏  举报