前言
最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录。
js的面向对象
先说说我目前了解的js创建对象方法
1.写一个函数,然后通过new创建对象
2.字面量的方式
如果想要复用的话,可能会用到工厂方法
工厂方法每次都要创建对象 并返回
构造方法创建对象方法可以更简洁
然而构造方法用实现实例间共享共同的方法,比较麻烦
原型可以实现实例共享所有属性
每个函数都有指向原型对象的指针,如果将一个函数的原型属性赋值给另外函数的实例,函数的原型将指向另外一个函数的原型对象,这样就形成原形链。
原型链可以是来模拟面向对象中的继承特性
在用原型的过程中,如果实例间的引用类型的值是指向同一个引用,所有实例间引用类型的值可能相互影响。
所以引入构成函数来生成一个副本对象 保证对象的独立性 他们的组合史称组合继承方式
但是这种模式,需要调用父类构造函数2次,性能可能不是最佳
这个时候寄生继承方式出现了 他实现的方式是以object()方法创建对象引用的副本,然后再给副本的构造实例赋值以子类的对象,最后将子类的对象的原型赋值以副本对象,这样就避免调用了父类构造函数,只在子类构造函数里通过父类.call(this,args)调用父类
最后寄生组合继承方式成了创建对象的比较完美的解决方案