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

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

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. Codeforces Round #505 D. Recovering BST(区间DP)

    首先膜一发网上的题解.大佬们tql. 给你n个单调递增的数字,问是否能够把这些数字重新构成一棵二叉搜索树(BST),且所有的父亲结点和叶子结点之间的gcd > 1? 这个题场上是想暴力试试的.结 ...

  2. debian右键添加在终端中打开

    sudo apt-get install nautilus-open-terminal -y 注销,重启

  3. LA 3667 Ruler 搜索

    题意: 给出\(n\)个长度,要设计一个有\(m\)个刻度的刻度尺,刻度尺的刻度从\(0\)开始. 使得任意一个长度都能被该刻度尺度量出来. 首先要使\(m\)最小,在\(m\)最小的前提下尺子的长度 ...

  4. Django Form two

    Django_Form: 1.class TeacherNewForm(Form): username = fields.CharField( required=True, error_message ...

  5. python - 读取配置文件

    # -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: read_config.py @ide: PyCharm Commun ...

  6. day01_03.人人都会编程

    PHP if语句打招呼编程 <?php$gender = "man"; if($gender == "man"){ echo "you are ...

  7. 元类相关(type & metaclass)

    metaclass作用: 1) 拦截类的创建 2) 修改类 3) 返回修改之后的类 """为什么要用metaclass类而不是函数? 由于__metaclass__可以接 ...

  8. zabbix2.4升级到2.5 --考虑升级到zabbix3.0

    现在zabbix服务器,zabbix服务日志频繁出现MySQL server  has gone away,经搜索,此问题在zabbix2.5之前是zabbix的一个bug,zabbix2.5后已经修 ...

  9. 【HDU4372】Count the Buildings (第一类斯特林数)

    Description $N$座高楼,高度均不同且为$1~N$中的数,从前向后看能看到$F$个,从后向前看能看到$B$个,问有多少种可能的排列数. $T$组询问,答案模$1000000007$.其中$ ...

  10. SPOJ QTREE4 - Query on a tree IV

    You are given a tree (an acyclic undirected connected graph) with N nodes, and nodes numbered 1,2,3. ...