原型、原型链、继承、类

109 阅读2分钟

1、原型与原型链

1)、函数上面有原型对象

2)、对象都有原型链

3)、原型链的继承关系

4)、new 操作符来作用这个函数时,称为构造函数

5)、从当前实例属性去查找,如果找到了就返回,如果没有则顺着原型链一层一层地向上找,直到找到null为止

6)、hasOwnProperty: 找到自身的私有属性

7)、自有属性和原型属性

2、继承

1) 原型链继承:

  • 核心:SubType.prototype = new SuperType()
  • 缺点:引用类型会被篡改

2)构造函数继承:

  • 核心:SuperType.call(this),
  • 缺点:1)只能继承父类的实例属性/方法,不能继承原型属性/方法;2)无法实现复用,每个子类都有父类实例函数副本,影响性能

3)组合继承:原型链实现原型属性和方法的继承,构造函数实现实例属性的继承

  • 核心:1)SubType.prototype = new SuperType();SubType.constructor = SubType;2)SubType函数中调用 SuperType.call(this)
  • 缺点: 第一次调用SuperType(),给SubType.protoype写入属性;第二次调用SubperType给instance 写入属性

4)原型试继承:利用一个空对象作为中介,将某个对象直接赋值给空对象的构造函数的原型

  • 核心:function object(obj){function F() {}; F.prototype = obj; return new F()}
  • 缺点:1)原型链继承多个实例的引用类型属性指向相同,存在篡改的可能;无法传递参数

5)寄生式继承

  • 核心: 在原型式继承的基础上,增强对象,返回构造函数,主要是增强函数
  • 缺点:同原型式继承

6)寄生组合式继承

  • 核心: function inheritPrototype(subType, superType){var prototype = Object.create(superType.prototype);prototype.constructor = subType;subType.prototype = prototype}

7)混入方式继承多个对象

8) es6类的extends关键字继承 --- 寄生组合式继承

3、类

1) 定义类:

  • class关键字,声明一个类
  • 提升: 函数声明会提升,类声明不会,所以如果你再类声明前去访问他,则会抛出RefeenceError错误
  • 类的表达式

2)类体和方法定义

  • 严格模式
  • 构造函数 contructor, 可以使用super关键字来调用父类的构造函数
  • 原型方法
  • 静态方法:static 关键字
  • 用原型和静态方法绑定this的值
  • 实例属性,必须定义在类的方法里面,静态或原型的数据必须定义在类定义的外面
  • 公有字段
  • 私有字段:例如: #height = 0

3)使用extends扩展子类,继承

4)Species

5)使用super调用超类

6)Mix-ins/混入

4、参考