对象属性继承

  • 原型继承
    - 实现方式: 将子类构造函数的原型 指向 父类构造函数的实例对象
    + 改变了子类构造函数的原型指向实现继承
    + 则子类构造函数实例对象 的原型指向 也发生变化了
    - 优点:
    + 实现了属性和方法的继承
    - 缺点:
    + 继承的属性不在子类的实例中,在原型中
    + 子类 没有自己的原型了

  • 借用继承(借用构造函数继承/借用call继承)
    - 在子类构造函数中,将父类构造函数当做普通函数通过call方法调用执行 来实现继承
    + 构造函数 也是函数,函数通过call方法调用执行会改变函数内的this指向
    - 优点:
    + 继承的属性在实例身上
    - 缺点:
    + 继承不到父类的方法(原型中的内容)

  • 组合继承
    + 借用继承 + 原型继承
    + 优点
    - 继承的属性在 实例中
    - 方法继承到了
    + 缺点:
    - 没有自己的原型
    + 子类添加方法属性的时候 是添加到父类构造函数的实例中
    - 多了一套属性

  • 拷贝继承
    - 利用for-in遍历父类构造函数的实例 添加到子类的原型中
    - 优点:
    - 属性方法都继承
    - 缺点:
    - 继承的属性不在实例本身
    -

    in 关键字
    - 语法: 字符串 in 对象
    - 结果: 布尔值
    + 判断字符串 是否在对象中 作为属性
    - 特点: 不仅会在对象本身比较,还会到原型中比较

  • 寄生式继承
    + 就是对继承对象的进一步封装拓展。


inHeritObject(o) {
    // 创建一个过渡对象
    function F() {}
    // 将父类对象的给过渡对象的原型对象上
    F.prototype = o;
    // 返回新的实例化对象
    return new F();
},
// 寄生式继承
parasiticObject(o) {
    const obj = this.inHeritObject(o);
    obj.getName = function() {
        console.log(this.name);
    }
    return obj;
}
  • ES6 中的类有指定的继承语法
    - 语法
    - 在子类定义的时候
    class 子类 extends 父类{
    constructor(){
    super(参数)
    }
    }
    - 注意:
    + 子类继承是必须 使用extends和super一起使用才可以实现完美继承
    + 在子类的constructor方法中 给实例添加属性只能在 super()之后添加
    + ES6中的类可以通过此语法 继承ES5中的构造函数
posted on 2022-11-08 20:14  玉龙龙玉  阅读(145)  评论(0)    收藏  举报

……