javascript --- 原型继承与属性拷贝的综合应用
对于继承来说,主要目标就是将一些现有的功能据为己有。也就是说,我们在新建一个对象的时候,通常首先继承现有对象,然后再为其添加额外的属性和方法。
对此,我们可以通过一个函数调用来完成。
具体而言就是:
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 --- 原型继承与属性拷贝的综合应用的更多相关文章
- 再谈javascript原型继承
Javascript原型继承是一个被说烂掉了的话题,但是自己对于这个问题一直没有彻底理解,今天花了点时间又看了一遍<Javascript模式>中关于原型实现继承的几种方法,下面来一一说明下 ...
- [转]Javascript原型继承
真正意义上来说Javascript并不是一门面向对象的语言,没有提供传统的继承方式,但是它提供了一种原型继承的方式,利用自身提供的原型属性来实现继承.Javascript原型继承是一个被说烂掉了的话题 ...
- 彻底理解Javascript原型继承
彻底理解Javascript原型继承 之前写过一篇Javascript继承主题的文章,这篇文章作为一篇读书笔记,分析的不够深入. 本文试图进一步思考,争取彻底理解Javascript继承原理 实例成员 ...
- JavaScript原型继承工作原理
原型继承的定义 当你阅读关于JS原型继承的解释时,你时常会看到以下这段文字: 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止.——出自JavaScript秘 ...
- 【转载】Javascript原型继承-学习笔记
阮一峰这篇文章写的很好 http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javas ...
- 【读书笔记】读《编写高质量代码—Web前端开发修炼之道》 - JavaScript原型继承与面向对象
JavaScript是基于原型的语言,通过new实例化出来的对象,其属性和行为来自于两部分,一部分来自于构造函数,另一部分是来自于原型.构造函数中定义的属性和行为的优先级比原型中定义的属性和优先级高, ...
- JavaScript 原型继承开端
1.原型继承本质 就javascript对象系统的实现来讲,对象并没有原型,而构造器有原型(构造器.prototype指向其原型).对象只有构造自某个原型的说法,并没有持有某个原型的说法. ...
- 浅析Javascript原型继承(转)
引自: http://blog.csdn.net/kittyjie/article/details/4380918 原作者解释的浅显易懂,非常不错的JavaScript prototype总结 JS没 ...
- Javascript原型继承容易忽略的错误
编写Javascript的开发者都知道,JS虽然没有类(ES6添加了class语法),但是可以模拟出OOP语言的类和面向对象的概念,比如我们都知道的一句话,Javascript中处处是对象,而面向对象 ...
随机推荐
- STM32——PWM基本知识及配置过程
将通用定时器分为四个部分: 1,选择时钟 2,时基电路 3,输入捕获 4,输出比较 本节定时器PWM输出主要涉及到定时器框图右下方部分,即输出比较部分 和上一讲相同,时基时钟来源于内部默认时钟 对此有 ...
- 求数组中两两相加等于20的组合(Python实现)
题目 求数组中两两相加等于20的组合. 例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20. 解析 分为两个步骤: 先采用堆排 ...
- MVC如何在解决方案下创建文件夹
背景:为什么要在解决方案下创建文件夹? 比如,在开发过程中,会抽象出大量的公共方法,如数据库访问的方法.配置文件读取方法等等,将这些方法生成自己的DLL库文件,方便在其他的项目中进行复用.那么,这些方 ...
- selenium2设置浏览器窗口
1.窗口最大化 //设置窗口最大化driver.manage().window().maximize(); 2.指定设置窗口大小 //指定呀设置窗口的宽度为:800,高度为600Dimension d ...
- LA 7048 Coprime 莫比乌斯反演
题意: 给出\(n(n \leq 10^5)\)个数字\(a_i(a_i \leq 10^5)\),从中选出\(3\)个数,使得这\(3\)个数两两互质或者两两不互质 分析: 可以说这是<训练指 ...
- layui的upload组件使用以及上传阻止测试
背景:页面上一个按钮,点击弹出上传框,从按钮的方法代码开始写:处理未选择文件阻止上传:通过判断选择文件的数量,显示或隐藏上传按钮: 在js中定义: function uploadFile(){ la ...
- loj2182 「SDOI2015」寻宝游戏
参考这里 #include <iostream> #include <cstdio> #include <set> using namespace std; typ ...
- bzoj3039 joyoi1939 玉蟾宫 悬线法
悬线法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- 异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\IUSR' 登录失败解决办法
最近在做.net项目,因为本人以前做java较多,所以对.net不熟悉,在项目完成后部署到IIS服务器上出现诸多问题,以上其中之一,若有时间,在更新其他问题的解决办法! 异常详细信息: System. ...
- CSS编码规范(转)
1 前言 CSS作为网页样式的描述语言,在百度一直有着广泛的应用.本文档的目标是使CSS代码风格保持一致,容易被理解和被维护. 虽然本文档是针对CSS设计的,但是在使用各种CSS的预编译器(如less ...