es5原型式继承简解

1. 原型式继承方法

js 继承使用不难,要说清楚,须要本身必定总结,才能说清楚。javascript

es5 的继承方式有不少种,这个是 js 语言自己形成,可是类实现继承以后的功能,有以下 3 条:java

  1. 子类继承父类,主要继承父类的原型上的属性和方法,和能够自定义子类继承父类的构造函数里的属性和方法
  2. 重写子类原型的属性和方法时,父类的原型的属性和方法不会更改
  3. 子类没有重写继承父类属性和方法,父类重写子类继承父类的属性和方法时,子类的原型上的属性和方法也会跟着重写

es5 继承最主要的原型式继承方法,这个函数步骤分为 4 步骤:app

  1. 建立一个中间的构造函数Fn,Fn.prototype = Super.prototype
  2. 实例化 Fn 为 var fn = new Fn(),将 Child.prototype = fn
  3. Child.prototype.constructor = Child
  4. Child 构造函数中封装一个 super 方法,来继承父类里的构造函数。

ps:固然步骤 1 和 2 可用 Object.create() 来替代。函数

代码以下:this

function extends (Sup, Sub) {
    // var Fn = function () {}
    // Fn.prototype = Sup.prototype
    // var fn = new Fn()
    // Sub.prototype = fn
    Sub.prototype = Object.cteate(Sup.prototpye)
    Sub.prototype.constructor = Sub
}

function super (Sup) {
    var args = []
    if (arguments.length > 1) {
        args = Array.protoype.slice.call(arguments, 1)
    }
    Sup.apply(this, args)
}
function Sup (name) {
    this.name = name
}
function Sub (name) {
    super(Sup, name)
}

extends(Sup, Sub)

内存分析:es5

2. 其余继承方式

明白上面一种方式,其余几种方法,就很容易理解。prototype

借用构造函数

子类只继父类构造函数里的属性,不继承原型code

组合继承

子类原型上继承父类全部定义属性,若是子类能够自定义继承构造函数里的属性blog

其余,略

相关文章
相关标签/搜索