在JS中可能的繼承模式有很多。在本章中,我們將研究幾種最為直接的模式。當然還有很多更為復雜的構造模式,但保持簡單通常是最好的。
1. 偽類
var Mammal = function (name){
this.name = name;
}
Mammal.prototype.getName = function (){
return this.name;
};
Mammal.prototype.says = function (){
return this.saying || '';
};
var myMammal = new Mammal('hello the mammal');
var name = myMammal.getName();
現在,我們可以構造另一個偽類來繼承Mammal,這是通過定義他的 constructor 函數并替換它的 prototype 為一個Mammal的實例來實現的。
var Cat = function(name){
this.name = name;
this.saying = 'meow';
}
//替換Cat.prototype 為一個新的 Mammal 實例
Cat.prototype = new Mammal();
//擴充新原型,增加 purr 和 get_name 方法
Cat.prototype.purr = function(n) {
var i, s = '';
for( i = 0; i < n; i ++ ){
if(s){
s += '-'
}
s += 'r';
}
return s;
}
Cat.prototype.getName = function(){
return this.says() + ' ' + this.name + ' ' + this.says();
}
var myCar = new Cat('Henrietta');
var says = myCar.says();
var purr = myCar.purr(5);
var name = myCar.getName();
"偽類"形式可以給不熟悉js的程序員提供便利,但它也隱藏了該語言的真實的本質。借鑒類的表示法可能誤導程序員去編寫過于深入與復雜的層次結構。
2 對象說明符
有時候,構造期要接受一大串參數,這可能令人煩惱。
我本人深有體會,之前寫的函數里接受的參數比較多,導致別人不好調用。
所以,最好的方法:
var parame = {
first: f,
middle: m,
last: l,
state: s,
city: c
}
var myObject = maker(parame);
- 原型
基于原型的繼承
- 函數化