原型链继承
js中当对象进行属性查找时,如果对象本身找不到对应的属性,就会去搜索原型链,结合这个特性,js就可以来实现对象之间的继承。
instanceof
&& isPrototypeOf()
|
|
constructor属性
对于所有的js原型对象,有一个constructor属性,该属性对应构造函数。
- 上述代码中will的原型是通过构造函数new Person()构造出来的对象(即Person{name:undefined, age:undefined}。will的构造函数是Person,而非Teacher。
- will访问constructor属性的时候,先找到Teacher.prototype,接着是Person.prototype,它的constructor属性指向Person构造函数。
重设constructor属性,使wiil对应到正确的构造函数中
|
|
原型的更新和重写
|
|
组合继承(两个构造函数)
在子类的构造函数中通过call来调用父类的构造函数进行初始化。
|
|
不足之处,在调用子类型构造函数的时候会重写超类型对象的属性。
原型式继承(通过字面量定义的对象)
|
|
以上的方法可以用Object.create()方法来实现原型式继承,两个参数
- 用作新对象原型的对象
- 为新对象定义的额外属性
123456789101112var C = Object.create(A,{sub:{value:function(){console.log('subC')}},multi:{value:function(){console.log('multiC')}}})
以上都是bullshit,又臭又长,现在直接使用es6的class,参照我后面一篇博客。