多重继承就是指,一个子对象中有不止一个父对象的继承模式。

想要实现她,还是非常简单的,而我们只需要延续属性拷贝的继承思路依次扩展对象即可,而对参数中所继承的对象没有限制。

function multi(){
    var n = {},
          stuff,
          j = 0;
          len = arguments.length;
     for(var j; j<len;j++){
         stuff =  argument[j];
         for(var i in stuff){
             if(stuff hasOwnPrototype(i)){
                 n[i] = stuff[i]
             }
         }
     }
     return n;
}

我们在其中来了个双重循环,内层循环用于属性拷贝,外层循环用来遍历函数中所传递进来的新对象。

现在来测试一下:

var shape = {
    name: 'shape',
    toString: function(){
        return this.name
    }
};

var twoDee = {
    name: 'Dee',
    dimension: 2
}

var triangle = multi(shape, twoDee, {
    name: 'Anna',
    getArea: function(){
        return this.side*this.height / 2;
    },
    side: 5,
    height: 5
})

来试一下:

triangle.getArea(); // 17.5
triangle.dimension;
triangle.toString); // Anna

要注意的是,mulit()中的循环是按照对象的顺序来进遍历的,也就是说,如果有两个同名的属性或方法,前一个就会被后一个所覆盖。

怎么样,比较简单吧!!!

继续A哥镇楼:

javascript --- 多重继承的更多相关文章

  1. javascript多重继承

    function employee(name, job, born) { this.name = name; this.job = job; this.born = born;} function h ...

  2. 一种javascript链式多重继承的方式(__proto__原型链)

    var a=function(){this.foo='bar';} a.prototype={b:1}; var aa=function(){} aa.prototype={c:2,__proto__ ...

  3. 多重继承 -Javascript中的apply与call详解

    举例 //定义一个函数 function add(x, y) { return x + y; } //用call 来调用 function myAddCall(x, y) { //调用 add 方法 ...

  4. Javascript中call和apply的区别和用法

    JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别.其实就是更改对象的内部指针,即改变对象的this指向的内容.这在面向对象的js编程过程中有时是很有用的.call ...

  5. 玩转JavaScript OOP[4]——实现继承的12种套路

    概述 在之前的文章中,我们借助构造函数实现了"类",然后结合原型对象实现了"继承",并了解了JavaScript中原型链的概念. 理解这些内容,有助于我们更深入 ...

  6. ES6新特性:使用新方法定义javascript的Class

    ES6中定义类的方式, 就是ES3和ES5中定义类的语法糖,虽然也有些区别,但是整体定义类的方式更加简洁,类的继承更加方便, 如果想对ES6中的继承更加熟悉, 最好了解ES5中原型继承的方式, 博客园 ...

  7. Javascript中的apply与call详解

    JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 一.方法定义 1.call 方法 语法:call([thisObj[,arg1[, arg2[, [,.arg ...

  8. javascript 中继承实现方式归纳

    转载自:http://sentsin.com/web/1109.html 不同于基于类的编程语言,如 C++ 和 Java,javascript 中的继承方式是基于原型的.同时由于 javascrip ...

  9. JavaScript instanceof 运算符深入剖析

    简介: 随着 web 的发展,越来越多的产品功能都放在前端进行实现,增强用户体验.而前端开发的主要语言则是 JavaScript.学好 JavaScript 对开发前端应用已经越来越重要.在开发复杂产 ...

随机推荐

  1. C语言结构体初始化的四种方法(转载)

    原文:https://blog.csdn.net/ericbar/article/details/79567108 定义 struct InitMember { int first: double s ...

  2. vmware esxi 6.0 开启嵌套虚拟化

    环境描述: 已通过vSphere Client创建一个名字为centos7的虚拟机,现在需要打开该虚拟机的嵌套虚拟化功能. 第一步: 开启ESXi Shell 开启vSphere的ssh远程登录服务或 ...

  3. Centos7 开机显示 ERST: Failed to get Error Log Address Range” 导致无法开机解决方法

    开机显示 ERST: Failed to get Error Log Address Range”   导致无法开机,也无法重新安装系统,解决方法:开机进入BIOS , 关闭ACPI选项即可正常开机

  4. foreach ($users as $key=>$value)

    1: foreach(array_name as $value) { statement; } 这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$ ...

  5. Java线程和多线程(四)——主线程中的异常

    作为Java的开发者,在运行程序的时候会碰到主线程抛异常的情况.如果开发者使用Java的IDE比如Eclipse或者Intellij IDEA的话,可能是不需要直接面对这个问提的,因为IDE会处理运行 ...

  6. 探究灰度测试(A/B Testing)

    一段小插曲 前段时间产品改版,产品经理为了改进用户体验,就决定改版用户的注册流程页面,但又怕身份证注册验证接口不稳定(第三方的身份证校验). 于是产品经理就让我通过随机概率去控制注册流程,让一部分用户 ...

  7. rocketmq源码分析2-broker的消息接收

    broker消息接收,假设接收的是一个普通消息(即没有事务),此处分析也只分析master上动作逻辑,不涉及ha. 1. 如何找到消息接收处理入口 可以通过broker的监听端口10911顺藤摸瓜式的 ...

  8. windows :Tomcat免安装版环境变量配置 + jdk配置

    1.  下载后解压,我解压的目录为:D:\Tomcat\apache-tomcat-9.0.1-windows-x64 2.  安装jdk和jre, 并配置环境变量: 2.1 用户变量新建JAVA_H ...

  9. day03_03 第一个Python程序

    Python的安装 之前安装了python2.7.11,接下来的课程因为是python3的,需要再安装一个python3版本...... 1.进入python.org进行选择安装 2.或者选择课件里的 ...

  10. [python篇]学习网址--更新

    http://www.yiibai.com/python/python_modules.html  ---易白教程 http://python.jobbole.com/81477/---伯乐在线