面向对象,继承、封装、多态。
面向对象是一个编程思想,支撑面向对象编程思想的语法是类(ES6之前没有这个概念)和对象。构造函数充当类的角色。构造函数和对象实现面向对象程序的时候,体现封装,继承,多态的特点。
封装:封构造函数
继承
继承:分类更加细分的构造函数
1.继承父一级的所有属性(改变父级构造函数的this指向)
Teddy无法直接继承Dog的原型对象,也就无法调用Dog的方法。因为本身不是通过new创建的Teddy,Teddy的也就无法直接共享到父一级上的方法。
2.继承父一级的原型对象(方法)
方法一:
对象拷贝:
地址拷贝:
值拷贝:
如果我们的原型继承使用了地址拷贝,那么如果父级修改了原型对象,子级也会跟着修改。要么就是子级修改了原型对象父级也会修改。这就影响到其他的子级使用父一级的原型。
原型链继承
如果使用值拷贝,那么子级和父级即使发生变化也不会相互影响。也称为原型链继承
方法二:ES6 Object.create() 原型链
原理:将子级的原型对象指向父级的原型对象,这个也是值拷贝。
方法三:子级.prototype=new 父级()
将子级的原型对象作为父级的实体,子级创建自己的属性是不会干扰到父级的。
多态:
使用原型链的继承之后,子级继承的构造函数方法进行更改只会在子一级生效,父级的构造函数方法还是一样的。
继承和多态同一件事情两种完全不同的侧重。
继承:侧重是从父一级构造函数,集成到的属性和方法(同样)
多态:侧重是子一级子级重写和新增的属性和方法。
(不一样)