js 原型继承 Prototype
javascript 中,(构造)函数可以继承另外一个对象。
1、构造函数实例化出来的对象除了本身成员外,还会拥有被继承对象的成员。
关键字:prototype
例:
var cat={name:"windy",climb:function(){console.log("可以爬树")}}; //对象cat
var tiger=function(){ //构造函数 tiger
this.color="white";
this.hobby=function(){console.log("喜欢吃肉")};
}
tiger.prototype=cat //构造函数tiger继承cat
var northTiger=new tiger();
console.log(northTiger); //打印如下:
2、继承单一成员
var tiger=function(){
this.color="white";
this.hobby=function(){console.log("喜欢吃肉")};
}
tiger.prototype.weight=100; //继承单一成员变量
tiger.prototype.cry=function(){console.log("会嚎叫")}; //继承单一成员方法
var northTiger=new tiger();
console.log(northTiger);//打印如下:
3、继承的注意事项:
a、本身和继承对象拥有同名的成员,要使用本身成员
b、单一成员和对象同时继承时,需要先继承对象再继承单一成员,不然无法继承到单一成员
c、同时继承多个对象,后者覆盖前者
b:例子1 先继承单一成员再继承对象
var cat={name:"windy"};
var tiger=function(){
this.color="white";
this.hobby=function(){console.log("喜欢吃肉")};
}
tiger.prototype.weight=100; //继承单一成员变量
tiger.prototype.cry=function(){console.log("会嚎叫")}; //继承单一成员方法
tiger.prototype=cat; //继承对象cat
var northTiger=new tiger();
console.log(northTiger);//打印如下:
可以看到,如下两个属性没有被继承,只继承了cat对象的name
tiger.prototype.cry=function(){console.log("会嚎叫")}; //继承单一成员方法
tiger.prototype=cat; //继承对象cat
b、例子2 先继承对象再继承单一成员
var cat={name:"windy",sex:"man"};
var tiger=function(){
this.color="white";
this.hobby=function(){console.log("喜欢吃肉")};
}
tiger.prototype=cat; //继承对象
tiger.prototype.name="justin"; //继承单一成员变量
tiger.prototype.cry=function(){console.log("会嚎叫")}; //继承单一成员方法
var northTiger=new tiger();
console.log(northTiger); 打印如下:
可以看到tiger继承了单一成员也继承了对象。因为先继承了对象,再继承了单一成员,对象的name与单一成员的nane属性相同,单一成员的name
覆盖了继承的对象的name