现有一段代码function New(aClass,parameters){
    return function new_(){
        this.type=aClass;
        if(aClass.initialize)       
        aClass.initialize.apply(this,parameters);
    }
    new_.prototype=aClass;
    return new new_();
}var obj={ name:"",age:"",initialize:function(n,a,callback){ this.name=n;this.age=a;this.callback=callback;}}
var myobj=New(obj,["zgm",20,mycallback]);//问题出在判断 if(aClass.initialize)上 上面的代码是正确的 可以运行 可是为什么当我把initialize方法定义到obj的原型中时  像这样 
var obj={name:"",age:""};
obj.prototype={
      initialize:function(n,a,callback){
            this.name=n;    ....
      }
}
//条件判断if(aClass.initialize) 就认为 initialize不存在呢???????
还有 当我把New方法 改为 
var Class={
     create:function(){
      this.initialize.apply(this,arguments);
     }
}
运行就有问题了  这两个方法有什么区别吗  
表达不太清楚 希望您解答

解决方案 »

  1.   

    你需要一个constructor:obj  没测试过  只是看的
      

  2.   

    var obj={name:"",age:""};
    obj.prototype={
          initialize:function(n,a,callback){
                this.name=n;    ....
          }
    }等价于:obj={name:"",age:"",prototype:{
          initialize:function(n,a,callback){
                this.name=n;    ....
          }
    }};看懂了么?对象的prototype操作是没用的,只是多了一个属性而已。对象这个类似function的prototype是内部对象,一般是访问不到的。但firefox下可以访问,具体属性记不太清了。好像是__proto__
      

  3.   


    谢谢啦  这个我懂了  还有一个问题就是当我用
    var Class={ 
           create :function(){
                  this.initialize.apply(this,argments);
           }
    用这个方法创建对象的时候  如果 initialize(n,a,callback)有参数的话 我应该怎样吧参数传递过去呢
    var obj=Class.create(); 参数应该写到create(这里吗?)     应该怎样写呢}
      

  4.   

    恩 对 就是在create后面的括号里面 写参数
      

  5.   

    var Class = {
                create: function() {
                    return function () {
                        this.initialize.apply(this, arguments);
                    }
                }
            }        function callback1() {
                alert("aaaa");
            }
            var obj = { name: "", age: "", initialize: function(n, a, callbacks) { this.name = n, this.age = a, this.callback = callbacks }, registerCallback: function() { alert("bbbbbb"); } };        var myobj = Class.create("zgm", 20, callback1);
            alert(myobj.name);这样写对吗  那为什么我最后获取的为空值呢  是哪里写的不正确  还望指出来啊
      

  6.   

    js代码重在灵活,但是往往找错时间,挺难找的,但是公司现在又js的倒是挺多的,所以js还是很有必要练练的
    你的错误楼上说的很对
      

  7.   

    谢谢   前辈了
    var Class = {
      create: function() {
      return function () {
      this.initialize.apply(this, arguments);
      }
      }
      }  function callback1() {
      alert("aaaa");
      }
      var obj = { name: "", age: "", initialize: function(n, a, callbacks) { this.name = n, this.age = a, this.callback = callbacks }, registerCallback: function() { alert("bbbbbb"); } };  var myobj = Class.create("zgm", 20, callback1);   //我这里传的参 能不能在obj 的initialize构造函数里面获得呢  如果不能应该怎样正确的传递initialize需要的参数  ?   希望前辈贴出代码 我好研究
      alert(myobj.name);
    还有这点困惑了 
      

  8.   

    你Class function,跟本不是这么用的。所以楼上那位给你说的是错的。你这个Class function只是return 一个function ,而真证用传参时,是实例化这个function的时候。如:
    var Node=Class.create();
    Node.prototype={
         initialize:function(param1,param2){
             do someting here...
         }
    }var nodeObj=new Node(par1,parm2);