构造函数有个 prototype 属性指向原型对象
实例化的对象有一个 [[prototype]] 属性指向原型对象
原型对象有一个 constructor 属性指向构造函数。
如果在实例的对象覆盖了原型对象中的某个属性或者方法后,会切断这个属性或方法指向原型的连接。即便后面把这个属性或者方法设置为 null,也不会恢复这个连接。只有通过 delete 操作符可以完全删除。注意:设置属性为 null 后调用这个属性,显示的是 null,设置方法为 null 后调用这个方法,显示的是 object is not a function.
使用字面量法重写对象原型后,对象原型的 constructor 不再指向构造函数,而是指向 Object 了。 《js高级》P155
另外,每一个构造函数的原型都只有一个:《js高级》P167
function SuperType(){
this.color = ["red","blue"];
}
function SubType(){};
SubType.prototype = new SuperType(); // 只会执行一次,使用一个new
var a = new SubType();
var b = new SubType();
console.log(a.color == b.color); // true
创建自定义类型的三个普遍的方法:
1. 组合使用构造函数模式和原型模式(使用构造函数定义实例属性,使用原型定义共享的属性和方法) 《js高级》P159
2. 组合继承 《js高级》P169
3. 寄生组合式继承 《js高级》P172