javascript --- 多重继承

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

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

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; // 2
triangle.toString); // Anna

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

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

继续A哥镇楼:

时间: 2024-10-03 19:54:52

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

J2EE学习之导航--摘自黑马程序员

搞软件开发已经2年多了,才发现原来还有很多的未知点和自己需要学习的地方,下面的知识点,自己摘自一个培训机构的网站,可以做自己的知识索引,也可自己学习导航和方向,供大家参考: 第一阶段:Html+CSS+JavaScript基础 Html HTML语言,HTML语言背景知识.HTML全局标签.格式标签.文件标签.超链接标签.图像标签.客户端图像地图.表格标签.帧标签.表单标签.头元素.分区标签. CSS CSS介绍.CSS的设置方法.样式选择器.样式属性介绍,Dreamweaver的使用. Jav

JavaScript实现多重继承

1.定义一个空的父类构造函数,然后通过prototype的方式为该父类定义属性和方法 2.定义一个空的子类的构造函数,然后将子类的原型绑定在父类的实例上,再将子类原型的父类也绑定在父类的实例上.通过prototype的方式为子类设置自己的属性和方法. 3.定义一个空的孙类构造函数,然后将孙类的原型绑定到子类的实例上,再将孙类原型的父类绑定到子类的实例上.通过prototype方式为孙类定义自己的属性和方法. 4.实例化一个孙类对象,通过调用该实例对象,调用自身的方法,也可以调用孙类的父类即文中的

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

var a=function(){this.foo='bar';} a.prototype={b:1}; var aa=function(){} aa.prototype={c:2,__proto__:a.prototype}; var aaa=function(){} aaa.prototype={c:3,d:4,__proto__:aa.prototype}; console.log(new a()); console.log(new aa()); console.log(new aaa()

javascript继承机制 &amp; call apply使用说明

一.继承机制 1.对象冒充:构造函数使用 this 关键字给所有属性和方法赋值,可使 ClassA 构造函数成为 ClassB 的方法,然后调用它. function ClassZ() { this.newMethod = ClassX; this.newMethod(); delete this.newMethod; this.newMethod = ClassY; this.newMethod(); delete this.newMethod; } 这里存在一个弊端,如果存在两个类 Clas

JavaScript面向对象

面向对象:不了解原理的情况下,会使用功能,不关注内部细节,是一种通用思想 对象:黑盒子 不了解内部的结构,知道表面的各种操作 面向对象编程OOP: 特点:抽象(抓住核心问题), 封装(不考虑内部实现,只考虑功能), 继承(遗传 父母和孩子 从父类继承出一些属性和方法,还可以 有自己的新方法) 多重继承  多态 对象由属性和方法组成 属性-变量:状态 静态 方法-函数:过程 动态 <!DOCTYPE html> <html> <head lang="en"&

玩转JavaScript OOP[4]&mdash;&mdash;实现继承的12种套路

概述 在之前的文章中,我们借助构造函数实现了"类",然后结合原型对象实现了"继承",并了解了JavaScript中原型链的概念. 理解这些内容,有助于我们更深入地进行JavaScript面向对象编程. 由于JavaScript是一门基于对象和原型的弱语言,灵活度非常高,这使得JavaScript有各种套路去实现继承.本篇文章将逐一介绍实现继承的12种套路,它们可以适用于不同的场景,总一种套路适合你. (亲:文章有点长,请点击右侧的「显示文章目录」按钮,以便导航和阅读

Atitit.实现继承的原理and方法java javascript .net c# php ...

Atitit.实现继承的原理and方法java javascript .net c# php ... 1. 实现继承的问题 1 2. 如何拷贝基类方法?采用prototype原型方式,通过冒充对象 1 3. 2.属性如何继承? 2 4. 几种继承方式的比较    2 5. 常用的apply ,call方法 3 6. 参考 3 1. 实现继承的问题 JavaScript中要实现继承,其实就是实现三层含义: 1.子类的实例可以共享父类的方法: 2.子类可以覆盖父类的方法或者扩展新的方法: 3.子类和

Javascript - ExtJs - 类

类(Class) preparation! 我用的是ext-4.2,解压后会得到以下文件 学习要用到的文件很少,现在保留以下文件和整个文件夹,然后删除其它文件并保持目录结构.本页面底部有提供基础包的下载. 在aspx页面中引入必要的Extjs文件,ext-all-dev可以不引人,但它作为调试使用,so建议保留. 测试一下程序是否能跑起来. <script type="text/javascript"> Ext.onReady(function () { Ext.Messa

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

ES6中定义类的方式, 就是ES3和ES5中定义类的语法糖,虽然也有些区别,但是整体定义类的方式更加简洁,类的继承更加方便, 如果想对ES6中的继承更加熟悉, 最好了解ES5中原型继承的方式, 博客园中说JS继承的文章很多, 想要深入了解的同学自己去搜: 定义一个class: 每一个使用class方式定义的类默认都有一个constructor函数, 这个函数是构造函数的主函数, 该函数体内部的this指向生成的实例, say() {}为原型上的方法, 我们定义一个简单的类 : "use stri