在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);
- 原型
基于原型的继承
- 函数化