继承
继承的概念
在JavaScript中,继承就是当前对象可以使用其他对象的方法和属性。
var animal = {
name:"Animal",
sex:"male",
age:5,
bark:function(){
console.log("Animal bark");
}
};
var dog = {};
//当前有两个对象,一个animal,一个dog
//dog没有属性和方法
//但是我们知道,dog属于animal,所以animal的方法和属性,都可以被dog使用
//如何让dog可以使用animal的属性和方法呢?
//通过继承就可以实现
继承的实现方式
在上一节内容中,最终的结论就是可以通过继承来让dog
对象可以使用animal
对象的属性和方法,那怎么实现继承呢?
1. 最简单的继承实现
直接遍历父对象的属性,将所有的属性加到当前对象上
var animal = {
name:"Animal",
sex:"male",
age:5,
bark:function(){
console.log("Animal bark");
}
};
var dog = {};
for (var k in animal){
dog[k]= animal[k];
}
2. 原型继承
每一个构造函数都有prototype
原型属性,通过构造函数创建出来的对象都继承自该原型属性。所以可以通过更改构造函数的原型属性来实现继承。
function Dog(){
this.type = "yellow Dog";
}
function extend(obj1, obj2){
for (var k in obj2){
obj1[k] = obj2[k];
}
};
//使用混入的方式,将属性和方法添加到构造函数的原型属性上,构造函数所创建出来的实例就都有了这些属性和方法。
extend(Dog.prototype, {
name:"",
age:"",
sex:"",
bark:function(){}
})
//使用面向对象的思想把extend方法重新封装
//extend是扩展的意思,谁要扩展就主动调用extend这个方法
//所以extend应该是对象的方法,那现在我们要扩展的是构造函数的原型对象
//所以给构造函数的原型对象添加一个extend方法
//如下:
Dog.prototype.extend = function(obj){
for (var k in obj){
this[k]=obj[k];
}
}
//调用方式就变成了下面这种形式
Dog.prototype.extend({
name:"",
age:"",
sex:"",
bark:function(){}
});