对于继承来说,主要目标就是将一些现有的功能据为己有。也就是说,我们在新建一个对象的时候,通常首先继承现有对象,然后再为其添加额外的属性和方法。

对此,我们可以通过一个函数调用来完成。

具体而言就是:

  1. 使用原型继承的方式,将一个已有对象设置成新对象的原型。

  2. 新建一个对象后,将另一个已有对象的属性拷贝过来。

function objectPlus(o, stuff){
    var n;
    function F(){};
    F.prototype = o.prototype;
    n = new F();
    n.uber = o;

    for(var i in stuff){
        n[i] = stuff[i];
    }
    return n;
}

这个函数接收两个参数o, stuff; 对象o用于继承,对象stuff用来拷贝方法和属性。我们来看一下实际应用:

首先,需要一个基本对象shape:

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

接着,创建一个继承于shape的对象,并为其添加额外的属性与方法。这些属性与方法与一个文本标识法创建的匿名对象提供:

var her = objectPlus(pepole,{
    name: 'Jock',
    toString:function(){
        return this.usber.toString() + ',' +this.name;
    }
})

接下来,我们继续来创建一个继承her对象的his对象,也为其添加一些属性和方法:

var his = ObjectPlus(her, {
    name: 'lus',
    getArea: function(){
        return this.side * this.height / 2;
    },
    side: 0,
    height: 0
})

下面我们来测试一下:

var my = objectPublic(her, {
   side:4,
   height:4
})my.getArea(); // 8my.toString(); // Anna, Jock, Lus, Lus

这里的不同之处在于,执行toString()函数时,his的name属性会被执行两次,这是因为我们在实例化my的时候继承与her的,her自己又有name属性,所以这里又多了一层继承关系。

我们也可以给该实例一个新的name属性:

objectPuls(her, {
    side: 4,
    height: 4,
    name: 'jiao'
}).toString();
// Anna, Jock, Lus, jiao

对不住了,这两天有点懒,玩了个游戏,怀怀旧,来个A哥镇楼:╮(╯▽╰)╭╮(╯▽╰)╭╮(╯▽╰)╭

javascript --- 原型继承与属性拷贝的综合应用的更多相关文章

  1. 再谈javascript原型继承

    Javascript原型继承是一个被说烂掉了的话题,但是自己对于这个问题一直没有彻底理解,今天花了点时间又看了一遍<Javascript模式>中关于原型实现继承的几种方法,下面来一一说明下 ...

  2. [转]Javascript原型继承

    真正意义上来说Javascript并不是一门面向对象的语言,没有提供传统的继承方式,但是它提供了一种原型继承的方式,利用自身提供的原型属性来实现继承.Javascript原型继承是一个被说烂掉了的话题 ...

  3. 彻底理解Javascript原型继承

    彻底理解Javascript原型继承 之前写过一篇Javascript继承主题的文章,这篇文章作为一篇读书笔记,分析的不够深入. 本文试图进一步思考,争取彻底理解Javascript继承原理 实例成员 ...

  4. JavaScript原型继承工作原理

    原型继承的定义 当你阅读关于JS原型继承的解释时,你时常会看到以下这段文字: 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止.——出自JavaScript秘 ...

  5. 【转载】Javascript原型继承-学习笔记

    阮一峰这篇文章写的很好 http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javas ...

  6. 【读书笔记】读《编写高质量代码—Web前端开发修炼之道》 - JavaScript原型继承与面向对象

    JavaScript是基于原型的语言,通过new实例化出来的对象,其属性和行为来自于两部分,一部分来自于构造函数,另一部分是来自于原型.构造函数中定义的属性和行为的优先级比原型中定义的属性和优先级高, ...

  7. JavaScript 原型继承开端

    1.原型继承本质       就javascript对象系统的实现来讲,对象并没有原型,而构造器有原型(构造器.prototype指向其原型).对象只有构造自某个原型的说法,并没有持有某个原型的说法. ...

  8. 浅析Javascript原型继承(转)

    引自: http://blog.csdn.net/kittyjie/article/details/4380918 原作者解释的浅显易懂,非常不错的JavaScript prototype总结 JS没 ...

  9. Javascript原型继承容易忽略的错误

    编写Javascript的开发者都知道,JS虽然没有类(ES6添加了class语法),但是可以模拟出OOP语言的类和面向对象的概念,比如我们都知道的一句话,Javascript中处处是对象,而面向对象 ...

随机推荐

  1. gdb调试时查看内存

    x/<n/f/u> <addr> n.f.u是可选的参数,<addr>表示一个内存地址 1) n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地 ...

  2. debian7安装icedove

    stable --icedove --esr $ cat /etc/apt/sources.list | grep "deb http://security.debian.org/ whee ...

  3. Linux学习-Linux 主机上的用户讯息传递

    查询使用者: w, who, last, lastlog 如果你想要知道目前已登入在系统上面的用户呢?可以透过 w 或 who 来查询喔!如下范例所示: [root@study ~]# w 01:49 ...

  4. Selenium2用最简xpath查找元素

    什么是xpath? 来自百度百科的解释:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点 ...

  5. 加密javascript代码

    最近看了个js日历,里面用到了加密,看了下,自己也模仿做加密,现在只能加密一般的javascript语句 <!DOCTYPE html> <html> <meta htt ...

  6. adb -a server nodaemon,设备一直显示 offline,而 adb devices 一直显示 device【已解决】

    1. adb -a server nodaemon 一直显示 offline 2. adb devices 一直显示 device 谷歌 和 度娘了一圈,未寻得解决办法 # 解决方法 问题已解决,使用 ...

  7. C++ 获取网页源码码的操作

    #include <stdio.h>#include <windows.h>#include <wininet.h>#pragma comment(lib,&quo ...

  8. [linx学习篇] ssh远程服务器免密码

    第一步:生成密钥.在终端下执行命令: ssh-keygen -t rsa 一路回车,各种提示按默认不要改,等待执行完毕.然后执行: ls ~/.ssh #可以看到两个密钥文件:id_rsa(私钥) i ...

  9. 刷题总结——生产产品(vijo1243)

    题目: 描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器中的任何一台完成,但生 ...

  10. Spring之BeanFactory与ApplicationConText区别

    使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org ...