ES5的继承方式

ES5中调用new的操作

1.先创建一个新的对象obj = {}
2.给新对象obj设置原型属性 obj.proto = A.prototype;
3.给新对象设置实例属性 A.constructor.apply(obj,args),将属性和方法实例化,constructor中的this指向的是新创建的obj对象
4.返回构造函数的结果,obj / this / 其他引用对象;

原型链继承

  1. 子类的原型是父类的实例对象 child.prototype = new father();
  2. 修改子类原型的constructor(未改之前指向father 即 new father().constructor == father) child.prototype.constructor = child;
    这样子类child就具有了和父类相同的属性和方法(在child的原型对象中)
    子类继承父类的方式是通过中间的父类的实例对象

组合继承

  1. 子类的原型是父类的实例对象 child.prototype = new father(),实现原型属性和方法的继承
  2. 修改子类的原型对象的constructor指向子类,
  3. 在子类的构造函数中加入父类构造函数的调用 super.call(this),实现父类实例属性的调用。
    组合继承的缺点是 会调用两次父类的构造函数,一次是在子类的构造函数中调用,另一次是在子类继承父类的实例对象 new father的时候。

寄生组合继承

  1. 创建一个新的对象obj,让obj指向father的原型对象father.prototype ,obj = Object.create(father.prototype)
  2. 将子类的原型对象设置成obj,child.prototype = obj,实现子类可以继承父类的原型对象中的属性,子类实例对象间属性的共有性。
  3. 在子类的构造函数中调用 father.call(this), 实现子类可以继承父类的实例属性,并保持子类实例对象间属性的独立性。
    子类继承父类的方式主要是:直接将父类的原型对象和实例属性赋给了子类。

ES5继承的主要方式是:先创建子类的this对象,将父类的方法和属性绑定到子类上,father.appply(this,args);

posted @ 2019-11-21 17:05  唐糖PJS  阅读(462)  评论(0编辑  收藏  举报