(1)继承
继承描述了两个类之间的“is a kind of "关系。比如学生"是一种"人,老师"是一种"人,所以学生类和人类构成继承关系、老师类和人类构成继承关系。子类丰富了父类,让父类更具体,更细化。
(2)实现继承的方法
1)、通过原型链实现继承
让子类构造函数的prototype,指向父类的一个实例
2)、借用构造函数
在子类的构造函数的内部调用父类的构造函数,并使用call()绑定上下文
3)、组合继承(常用)
将通过原型链实现继承和借用构造函数实现继承这两个方法组合在一起,就叫组合继承
4)、原型式继承
通过Object.create()方法,可以根据指定的对象为原型创建出新对象
Object.create()的兼容性写法:
<script>
// 道格拉斯·克罗克福德写的一个函数,面试常考
//函数的功能是以o为原型,创建新对象
// 第二个参数表示要添加的属性
function object(o, c) {
// 创建一个临时构造函数
function F() {}
// 让临时函数的prototype指向o,这样它new出来的对象,__proto__指向了o
F.prototype = o;
// 返回F的实例,用一个变量接收
var result = new F();
// 遍历要添加的属性c
for (var k in c) {
// 将c中的属性加入result中
result[k] = c[k];
}
return result;
}
var obj1 = {
a: 11,
b: 12
};
var obj3 = {
m: 22,
n: 44
};
var obj2 = object(obj1, obj3);
console.log(obj2.__proto__ === obj1); // true
console.log(obj2.a); //11
console.log(obj2.b); //12
console.log(obj2.m); // 22
console.log(obj2.n); // 44
</script>
5)、寄生式继承(不常用)
6)、寄生式组合继承(不常用)