js中以create方法来创建类

/** obsolete syntax **/    
var Person = Class.create();    //
通过Class.create方法创建空类   
Person.prototype = {               //
把方法定义到prototype中,注意,是通过initalize方法初始化类的属性   
  initialize: function(name) {    
    this.name = name;    
  },    
  say: function(message) {    
    return this.name + ': ' + message;    
  }    
};    
  
var guy = new Person('Miro');    
guy.say('hi');    
// -> "Miro: hi"    
                                            //prototype
中的继承方式:   
var Pirate = Class.create();    //
建立空类;   
// inherit from Person class:    
Pirate.prototype = Object.extend(new Person(), {    //
先实例化超类,再把超类中的方法复制到子类中去,   
  // redefine the speak method                               //
注意,实际上prototype类定义机制中并没有直接定义   
say: function(message) {                                       //
类的属性而是通过intilize方法,而且所有的方法都   
    return this.name + ': ' + message + ', yarr!';      //
之直接定义在prototype中,所以直接用原型链方式   
  }                                                                        //
继承超类的所有方法不会产生问题。   
});    
  
var john = new Pirate('Long John');    
john.say('ahoy matey');    
// -> "Long John: ahoy matey, yarr!"  
/** obsolete syntax **/ 
var Person = Class.create();    //
通过Class.create方法创建空类
Person.prototype = {               //
把方法定义到prototype中,注意,是通过initalize方法初始化类的属性
  initialize: function(name) { 
    this.name = name; 
  }, 
  say: function(message) { 
    return this.name + ': ' + message; 
  } 
}; 
var guy = new Person('Miro'); 
guy.say('hi'); 
// -> "Miro: hi" 
                                            //prototype
中的继承方式:
var Pirate = Class.create();    //
建立空类;
// inherit from Person class: 
Pirate.prototype = Object.extend(new Person(), {    //
先实例化超类,再把超类中的方法复制到子类中去,
  // redefine the speak method                               //
注意,实际上prototype类定义机制中并没有直接定义
say: function(message) {                                       //
类的属性而是通过intilize方法,而且所有的方法都
    return this.name + ': ' + message + ', yarr!';      //
之直接定义在prototype中,所以直接用原型链方式
  }                                                                        //
继承超类的所有方法不会产生问题。
}); 
var john = new Pirate('Long John'); 
john.say('ahoy matey'); 
// -> "Long John: ahoy matey, yarr!"

来看一下Class.create方法的实现代码

var Class = {   
  create: function() {   
    return function() {                                          //
实际上把所有的属性定义到intiliaze方法(实际上是一个类)中,   
      this.initialize.apply(this, arguments);              //
然后通过对象冒充方式继承该类   
    }   
  }   
}             
var Class = {
  create: function() {
    return function() {                                          //
实际上把所有的属性定义到intiliaze方法(实际上是一个类)中,
      this.initialize.apply(this, arguments);              //
然后通过对象冒充方式继承该类
    }
  }
}    

可以从prototype的例子充分体会到通过对象冒充和原型链类继承的差别,一般来说属性需用对象冒充方式继承,方法需用原型链方式继承。

转载于:https://www.cnblogs.com/hemood/archive/2008/09/26/1299471.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值