知识重温:
- 每个构造函数都有一个原型对象,原型有一个属性(constructor)指回构造函数,而实例有一个内部指针_proto_([[Prototype]]) 指向原型。实例与构造函数的原型之间有直接关系,实例与构造函数之间没有。
- 原型链的基本思想:上面如果原型是另一个类型的实例呢?意味着这个原型本身有一个内部指针指向另一个原型,相应的另一个原型也有一个指针(constructor)指向另一个构造函数。这样就在实例和原型之间构造了一条原型链.原型链还有一环,所有引用类型都继承Object,任何函数的默认原型都是一个Object实例,这就意味着这个实例有一个内部指针指向object.prototype.
一.原型链继承
基本思路:通过原型继承多个引用类型的属性和方法。
缺点:
1.原型中包含的引用值会在所有实例间共享
2.子例在实例化时不能给父类型的构造函数传递参数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<button id="btn">按钮</button>
<script>
function SuperType() {
this.property = true;
}
SuperType.prototype.getSuperValue = function () {
return this.property;
}
function SubType() {
this.subproperty = false;
}
//继承 SuperType