随笔 - 45,  文章 - 0,  评论 - 2,  阅读 - 9004

对象属性继承

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

  • 借用继承(借用构造函数继承/借用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   玉龙龙玉  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

欢迎这位怪蜀黍来到《js对象属性继承的方式都有哪些 - 玉龙龙玉 - 博客园》
点击右上角即可分享
微信分享提示