javascript中类的创建和继承(3)

作者:yring 来源:经典论坛 时间:2008-05-08 12:07:00 

声明子类时对子类的initialize进行重写

1.60以前

var Animal = Class.create();    
Animal.prototype = {    
  initialize: function(name, sound) {                                 //超类,顶一个两个参数   
    this.name = name;    
    this.sound = sound;    
  },                 
  
speak: function() {    
alert(name + " says: " + sound + "!");    
}    
};    
  
var snake = new Animal("Ringneck", "hissssssssss");    
snake.speak();    
// -> alerts "Ringneck says: hissssssssss!"    
  
var Dog = Class.create();    
  
Dog.prototype = Object.extend(new Animal(), {    
initialize: function(name) { //子类,定义一个参数   
this.name = name;    
this.sound = "woof";    
}    
});    
  
var fido = new Dog("Fido");    
fido.speak();    
// -> alerts "Fido says: woof!"    
var Animal = Class.create(); 
Animal.prototype = { 
  initialize: function(name, sound) {                                 //超类,顶一个两个参数
    this.name = name; 
    this.sound = sound; 
  },               
speak: function() { 
alert(name + " says: " + sound + "!"); 

}; 
var snake = new Animal("Ringneck", "hissssssssss"); 
snake.speak(); 
// -> alerts "Ringneck says: hissssssssss!" 
var Dog = Class.create(); 
Dog.prototype = Object.extend(new Animal(), { 
initialize: function(name) { //子类,定义一个参数
this.name = name; 
this.sound = "woof"; 

}); 
var fido = new Dog("Fido"); 
fido.speak(); 
// -> alerts "Fido says: woof!"

1.60以后

var Animal = Class.create({    
  initialize: function(name, sound) {    
    this.name = name;    
    this.sound = sound;    
  },    
             
  
speak: function() {    
alert(this.name + " says: " + this.sound + "!");    
}    
});    
// subclassing Animal    
var Snake = Class.create(Animal, {    
initialize: function($super, name) { //通过$super的方式调用超类的initliaze,    
$super(name, 'hissssssssss');    
}    
});    
var ringneck = new Snake("Ringneck");    
ringneck.speak();    
//-> alerts "Ringneck says: hissssssssss!"    
  
var rattlesnake = new Snake("Rattler");    
rattlesnake.speak();    
//-> alerts "Rattler says: hissssssssss!"    
  
// mixing-in Enumerable    
var AnimalPen = Class.create(Enumerable, {    
initialize: function() {    
var args = $A(arguments);    
if (!args.all( function(arg) { return arg instanceof Animal }))    
throw "Only animals in here!"  
this.animals = args;    
},    
  
// implement _each to use Enumerable methods    
_each: function(iterator) {    
return this.animals._each(iterator);    
}    
});   
var snakePen = new AnimalPen(ringneck, rattlesnake);    
snakePen.invoke('speak');    
//-> alerts "Ringneck says: hissssssssss!"    
//-> alerts "Rattler says: hissssssssss!"    
           
var Animal = Class.create({ 
  initialize: function(name, sound) { 
    this.name = name; 
    this.sound = sound; 
  }, 
          
speak: function() { 
alert(this.name + " says: " + this.sound + "!"); 

}); 
// subclassing Animal 
var Snake = Class.create(Animal, { 
initialize: function($super, name) { //通过$super的方式调用超类的initliaze, 
$super(name, 'hissssssssss'); 

}); 
var ringneck = new Snake("Ringneck"); 
ringneck.speak(); 
//-> alerts "Ringneck says: hissssssssss!" 
var rattlesnake = new Snake("Rattler"); 
rattlesnake.speak(); 
//-> alerts "Rattler says: hissssssssss!" 
// mixing-in Enumerable 
var AnimalPen = Class.create(Enumerable, { 
initialize: function() { 
var args = $A(arguments); 
if (!args.all( function(arg) { return arg instanceof Animal })) 
throw "Only animals in here!"
this.animals = args; 
}, 
// implement _each to use Enumerable methods 
_each: function(iterator) { 
return this.animals._each(iterator); 

});
var snakePen = new AnimalPen(ringneck, rattlesnake); 
snakePen.invoke('speak'); 
//-> alerts "Ringneck says: hissssssssss!" 
//-> alerts "Rattler says: hissssssssss!" 
标签:类,prototype,继承,javascript
0
投稿

猜你喜欢

  • JS 中如何判断 null

    2007-12-13 20:28:00
  • 请给PNG8一个机会:对png8的误解

    2009-09-21 10:45:00
  • SQLServer中的切割字符串SplitString函数

    2011-12-01 08:14:09
  • 设计手机端应用时的一些建议

    2011-05-14 16:45:00
  • 用doctype激活浏览器模式

    2009-06-15 19:02:00
  • 关于reflow

    2007-09-23 13:30:00
  • IE6实现min-width

    2008-06-12 12:40:00
  • 获得当前数据库对象依赖关系的实用算法

    2009-01-08 13:28:00
  • asp中怎么输出双引号?

    2008-01-31 13:30:00
  • 介绍27款经典的CSS框架

    2011-03-04 16:24:00
  • Javascript函数类型判断解决方案

    2009-08-27 15:32:00
  • 解释FCKeditor样式的工作原理

    2007-10-11 13:34:00
  • SQL server高级应用 收藏版

    2012-10-07 11:04:06
  • Mootools 1.2教程(11)——Fx.Morph、Fx选项和Fx事件

    2008-12-04 16:03:00
  • asp上传文件自动重命名方法

    2007-08-24 09:46:00
  • 网站改版常见问题答疑

    2008-08-22 18:31:00
  • Dreamweaver基础技巧全面接触

    2010-03-25 12:23:00
  • ASP中Request对象获取客户端数据的顺序

    2007-09-22 10:36:00
  • 关于淘宝商城新版的一点看法

    2009-06-28 16:00:00
  • 处理HTML代码的若干函数

    2009-08-21 13:21:00
  • asp之家 网络编程 m.aspxhome.com