网络编程
位置:首页>> 网络编程>> JavaScript>> javascript中类的创建和继承(3)

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

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

标签:类,prototype,继承,javascript

声明子类时对子类的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!" 
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com