美文网首页javascript设计模式笔记
JavaScript进阶:多继承原理

JavaScript进阶:多继承原理

作者: 听书先生 | 来源:发表于2022-01-17 16:08 被阅读0次
1、单继承-属性复制

单继承是通过对源对象的属性key的遍历,将源对象对应key和value值添加到目标对象中去。

// 单继承  拷贝对象
extend(target, source) {
    for(let property in source) {
        target[property] = source[property];
    }
    return target;
}

extend实现的一个浅复制,这样继承下来的只对值数据类型有效,对引用类型的没有效果
根据这种思路就可以去拓展实现继承多个对象的属性,利用arguments即可实现

2、多继承

第一个参数为目标对象,从参数列表的下标1开始进行遍历获取到的都是需要继承的对象属性,然后再将不同的属性和属性值加到目标对象中。

// 多继承
extends() {
    let i = 1, // 设为1,索引为0的不需要进行属性遍历
    len = arguments.length, // 函数的参数列表的长度
    target = arguments[0]; // 将第一个参数设为目标对象
    for (;i < len; i++) {
        for (const property in arguments[i] ) {
            // arguments[i]为索引为1开始需要继承的不同的对象
            target[property] = arguments[i][property];
        }
    }
    return target;
}

进行测试目标对象的属性拥有:

let Book = {
    bookName: 'javascript设计模式',
    bookList: ['1','2','3','4','5']
}
let Person = {
    userName: 'lisi',
    userAddr: 'jiangsu'
}
// 创建一个对象
let Stu = {
    weight: 180,
    height: 180
}
this.extends(Stu, Book, Person);
console.log(Stu);
图1.png

可以看到Stu对象是拥有自身属性的同时,也拥有了Book对象的属性和Person对象的属性。

  • 优化:
    可以全局的放入到Object对象的原型上去,这样不同模块,不同的对象均可以使用
// 多继承
Object.prototype.extends = function() {
    let i = 1, // 设为1,索引为0的不需要进行属性遍历
    len = arguments.length, // 函数的参数列表的长度
    target = arguments[0]; // 将第一个参数设为目标对象
    for (;i < len; i++) {
        for (const property in arguments[i] ) {
            // arguments[i]为索引为1开始需要继承的不同的对象
            target[property] = arguments[i][property];
        }
    }
    return target;
}
图2.png

打印Object的原型,可以看到extends方法是已经加进去了。

相关文章

  • JavaScript进阶:多继承原理

    1、单继承-属性复制 单继承是通过对源对象的属性key的遍历,将源对象对应key和value值添加到目标对象中去。...

  • 搞懂 JavaScript 继承原理

    摘要: 理解JS继承。 原文:搞懂 JavaScript 继承原理 作者:前端小智 Fundebug经授权转载,版...

  • 前端系列知识目录

    CSS系列??? 10 分钟理解 BFC 原理 JavaScript系列学习??? 进阶篇 ? JavaScirp...

  • javascript原型继承原理

    前言 我们都知道,js在ES6以前是没有类的概念的,如果想用面向对象的思想来开发它就要去了解他的继承实现方式。ja...

  • 深入JavaScript继承原理

    javascript继承 ES6之前,JavaScript本质上不能算是一门面向对象的语言,因为它对于封装,继承,...

  • Javascript继承的原理

    JavaScript的继承是通过原型链继承,与传统面向对象的继承方式不同。 prototype与原型 我们从头开始...

  • 深入JavaScript继承原理

    ES6 的 class 语法糖你是否已经用得炉火纯青呢?那如果回归到 ES5 呢?本文,将继续上一篇的 《Java...

  • JavaScript 对象及对象的创建

    前言 即使不了解Javascript的设计原理和继承机制这些东西的时候,我们依然能很好的使用Javascript去...

  • JavaScript 对象及对象的创建

    前言 即使不了解Javascript的设计原理和继承机制这些东西的时候,我们依然能很好的使用Javascript去...

  • JavaScript原型继承工作原理

    原型继承的定义 当你阅读关于JS原型继承的解释时,你时常会看到以下这段文字: 当查找一个对象的属性时,JavaSc...

网友评论

    本文标题:JavaScript进阶:多继承原理

    本文链接:https://www.haomeiwen.com/subject/hkmchrtx.html