var Class = {
  create: function() {
return function() {
  this.initialize.apply(this, arguments);
}
  }
}
 var Person = Class.create();
 Person.prototype = {
   initialize: function(name) {
   this.name = name;
     },
   getName: function(prefix) {
     return prefix + this.name;
      }
  };
这段代码真的有点糊涂啊, 照我理解是这个this再去继承自己的this.initialize()方法。为什么自己去继承自己的一个属性呢? 哎~~糊涂,糊涂。帮我解释下吧。高手们

解决方案 »

  1.   


    <script type="text/javascript">
    <!--
    // ====>
    var Class.create = function(){
    return function(){
    this.initialize.apply(this, arguments);
    }
    }
    // ====>
    var Person = Class.create(); // ====>
    var Person = function(){ // Person
    this.initialize.apply(this, arguments);
    }

    var p = new Person('Tom');//实例化Person对象执行 Person的initialize 即prototype绑定的那个方法,并通过apply传递参数
    //-->
    </script>
    给你化简一下
      

  2.   

    是不是这样子理解,是去构造一个带有initialize属性的对象? 意义何在呢? 如果要这样创建对象的时候直接定义不也行么? 看书都看晕了!!!
      

  3.   

    把JS做成面向对象的,模拟class定义,好比c,java中的class a(){} ...
    然后把代码封状好,让其"看起来"像面向对象的,也会有很好的结构,有利于代码管理
    其次,这样写的好处是不占用全局命名空间,容易复用
      

  4.   

    说白了,那段代码的意思就是模拟一个class xxx(){}
    initialize 就是他的默认构造函数
      

  5.   

    利用原型apply,让创建的对象可以调用Class.create()方法来构造其构造函数就是initialize ,这样说明白点了没?
      

  6.   


    其实整个过程我理解了, 是这样子的:var Person = Class.create(); 这个的时候其实已经构造了一个函数
    Person=function(argument){initialize: function(argument){};}
    接下去就是具体定义initialize方法。 哎~~到这里糊涂了有点,原型的好处是什么呢?
      

  7.   


    var Class = {
      create: function() {
        return function() {
          this.initialize.apply(this, arguments); //相当于return 谁调用我我就是谁的属性.initialize(arguments)
        }
      }
    }
     var Person = Class.create();//这里得到的是Person的initialize调用, 所以是Person.initialize(arguments)  相当于构造函数persion(name){this.name=name}
     Person.prototype = {
       initialize: function(name) {
       this.name = name;
         },
       getName: function(prefix) {
         return prefix + this.name;
          }
      };
      

  8.   

    var Person = Class.create();//这里得到的是Person的initialize调用, 所以是Person.initialize(arguments) 要的就是这个结果:) 查了书上的简单例子完全可以对上。 只是你后面那句相当于构造函数persion(name){this.name=name} 因为此刻还没写initialize具体干的事。
      

  9.   

    首先,你要清楚apply方法  obj.fun.apply(obj1,arguments) 获得的是obj1(arguments)的调用也就是说即使obj1不具备该方法,比如Array.slice.apply(obj1,argument) 中,obj1不具备array类才有的slice(分割字符串)方法,但是这里可以让他得到这个方法其次,你要清楚this指向的对象是谁一切就明了了
      

  10.   

    下面
    [code=JScript]
    Person.prototype = {
       initialize: function(name) {
       this.name = name;
         },...
    [code]
    中的  initialize: function(name) {
       this.name = name;
         },
    就是他要做的事情 function initialize(name){this.name=name}
      

  11.   

    恩,理解了。Thanks,结贴给分咯
      

  12.   

    这里有详细介绍:
    http://www.cnblogs.com/uedt/archive/2010/06/24/1764561.html