学习一下 b继承a的方法~
原型链继承
新实例的原型等于父类的实例
function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
function Cat(name){
this.name = name;
}
Cat.prototype = new Animal();//原型链继承
实例可继承的属性有:
- 实例的构造函数的属性
- 父类构造函数属性
- 父类原型的属性
(父类的实例不能被继承~)
(翻了高级程序设计这本书 里面的图有利于理解:)
代码:
继承指向:
借用构造函数
也称为 对象冒充,伪造对象,经典继承
子类型构造函数的内部调用超类型构造函数
function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
Animal.prototype.run = function () {
return this.name + ' are both' + this.age;
};
function Cat(name){
Animal.call(this, name); //对象冒充,给超类型传参
}
var cat = new Cat("Black Cat");
–Cat对象能直接调用Animal的方法以及属性
继承了父类构造函数的属性,在子实例中可向父实例传参。
缺点:
方法都在构造函数中定义,函数复用无从谈起
原型链定义的方法对子类型不可见的
组合继承
function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
Animal.prototype.run = function () {
return this.name + ' are both' + this.age;
};
function Cat(name){
Animal.call(this, name); //对象冒充,给超类型传参
}
Cat.prototype = new Animal();//原型链继承
var cat = new Cat("Black Cat");
cat.showName();
原型链继承可以继承原型属性和方法,构造函数继承可以继承实例属性,即实现了函数复用,又保证实例也有自己的属性方法。常用这个方法~
还有一些 :
- 原型式继承:
object.create(),接收两个参数,一个是新对象的原型,一个(可选)是为新对象额外定义属性的对象
包含引用类型值的属性会共享相应的值!
- 寄生式继承:
createAnother()传递对象作为原型,该对象传递给object() (类似原型式),增强新对象再返回
该方法不能做到函数复用,与 对象冒充类型
- 组合寄生继承
集寄生式继承与组合继承的优点