obj.prototype = {
                initialize:function(){
                    alert('test');
                }
          }
这个是替换了
function() {
                return function() {
                  this.initialize.apply(this, arguments);
                }
              }
的默认的prototype属性实际上就是Object的prototype属性和方法问题

解决方案 »

  1.   

    var obj  = new obj();//obj是个函数引用,()就运行了我觉得是new操作符而不是()
    你可以通过去掉()试验一下
    即:
              var obj  = new obj;
    依然提示test在js中 var obj= new Object();和 var obj = new Object;是等同的
      

  2.   

    好好看看prototype的链
    就是说obj这个有一个prototype的链,链中的第一个对象是create而create本身也有prototype, 这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。 
    当一个取值操作发生时,obj的整个prototype链就开始工作 
      

  3.   

    好好看看prototype的链
    就是说obj这个有一个prototype的链,链中的第一个对象是create而create本身也有prototype, 这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。 
    当一个取值操作发生时,obj的整个prototype链就开始工作 
      

  4.   

    var a = function(){
      this.b.apply(this, arguments);
     }
             
      a.prototype = {
                    b:function(){
                        alert('test');
                    }
              }
              var c  = new a();简化一下是这样的吧
      

  5.   

     恩,已看了
    我最不明白的地方是:this.initialize//已引用obj对象的function,
                                                  //但为什么在this.initialize上调用 apply方法,也就是调用
                                                  //function(){
                                            // alert('test');
                                             //}的apply,而方法只是修改上下文对象而已,为什么会导致运行这个
                                                    //这个函数
      

  6.   

    这个的做法其实和6楼是一个形式的因为var obj = Class.create();
    这个执行以后就变成了
    var obj = function(){
                 this.b.apply(this, arguments);
             };
      

  7.   

    再不明白的,你看看prototype的继承
      

  8.   


    各位 老大都把焦点放在prototype上了, 这点我已经明白了
    但为什么会导致函数运行
      

  9.   

    <html>
    <head>
    <script type="text/javascript">
    var ojb1  = new Object();

        var Class = {
      create: function() {
    return function() {
      this.initialize.toString();//这样运行时就不会有alert出现
      //this.initialize()//调用 方法,有alert出现
      this.initialize.apply(this, arguments);//这样运行也有alert出现
      //为什么第一个不会出现alert是,而第三个出现,第二个出现很容易理解
     
    }
      }
    }
     var obj = Class.create();
      obj.prototype = {
    initialize:function(){
    alert('test');
    }
      }
       //obj指向函数这个函数-->   function() {
         // this.initialize.apply(this, arguments);
     //}
      var obj  = new obj();//obj是个函数引用,()就运行了

     //上面这句句创建了一个obj对象,自然就有prototype属性(对象)里的initialize属性,且这个属性指身一//函数,在initialize所引的函数上调用apply方法
     //而aplly只是修改函数上下文对象,为什么会导致initialize引用的函数运行
     //或者说为什么页面一打开就会运行initialize:function(){...}函数,即alert('test');
    </script>
    </head>

    <body>

    </body>
    </html>
     
    //为什么第一个不会出现alert是,而第三个出现,第二个出现很容易理解
      

  10.   

    第二个怎么可能会出现alert
    第二运行了只是等于function(){ 
                this.b.apply(this, arguments); 
            }; 
    这个
    最后得到的形式是var obj = function(){ 
                this.b.apply(this, arguments); 
            }; 
    obj.prototype = {
                    initialize:function(){
                        alert('test');
                    }
              }
     var obj  = new obj();这样你明白了吗?
    不明白,你把它转成:var obj = function(){ 
                this.initialize.apply(this,new Array('你好','来吧'));
            }; 
    obj.prototype = {
                    initialize:function(name,age){
                        alert(name);
                    }
              }
     var obj  = new obj();
      

  11.   

    至于为什么执行了initialize:function(){...}你看上面的那个应该明白吧var obj  = new obj();这个实例化然后执行this.initialize.apply(this,new Array('你好','来吧'));这个不就是
    obj.initialize.apply(this,new Array('你好','来吧'));吗?
      

  12.   

    再不明白为什么执行就看看
    apply方法吧
      

  13.   


    function cat(name,age){
        alert(name+ age);
    }
    cat.apply(null,new Array('你好','来吧'));这个例子明白了吧
      

  14.   


    在对象的方法调用apply会导致方法运行:如上面的例子,调用cat函数的apply方法,导致了函数运行
    但这里为什么alert出了   你好来吧,就这点不明白
    非常谢谢chinmo 
      

  15.   

    汗!!!!你还是去看看apply方法的基础吧这是基础啊function cat(name,age){
        alert(name+ age);
    }
    cat.apply(null,new Array('你好','来吧'));这个与function cat(name,age){
        alert(name+ age);
    }
    cat.call(null,name,age);
    是同一个道理的你去看看这2个的基础吧