js 继承概述
上文讲述过js实现面向对象,一定是能够实现继承的效果的。尽管说非常多的js框架都帮助我们实现了继承的功能。或者说在日常的工作和学习中我们压根就用不到js的继承,可是我们还是须要了解一下js中继承。以方便我们阅读框架中的继承是怎样实现的。在以下的文章中我会给大家模拟一下js中继承的实现。
先来看一下以下创建对象的一种方式:
/*
* 对象工厂
*/
function objectFactory(jsonObj){
function objectEntity(){ }
if(typeof jsonObj == "object"){
for(var index in jsonObj){
objectEntity.prototype[index] = jsonObj[index];
}
}
return objectEntity;
} var Person = objectFactory({
pname:'andy',
sex:'man'
}); var person = new Person();
console.info(person+"--"+Person);// [object Object] -- function objectEntity(){}
console.info(person.pname);
console.info(person.sex);
objectFactory接受的是一个json对象jsonObj作为參数,在这个函数内部创建了一个函数objectEntity。然后就推断输入的jsonObj是否是对象类型。假设是那么就遍历这个json对象,然后把遍历出来的每一个值都附加objectEntity的原型上面,请注意,以下返回的
就是objectEntity(能够參考上节中的js闭包概念),也就是说Person指向的就是objectEntity,那么Person的原型上面自然的就有了
pname,sex等属性。假设上述可以理解的话,我们就行进行下一步的继承的实现(类似于非常多框架中的继承底层实现)
/*
* 继承
*/
function inherit(obj,prop){
function f(){ }
if(typeof obj=="object"){
for(var index in obj){
f.prototype[index] = obj[index];
}
}else{
f.prototype = obj.prototype;
for(var index in prop){
f.prototype[index] = prop[index];
}
} return f;
} var Animal = inherit({
type:'animal',
name:'animal',
jump:'jump'
}); var Dog = inherit(Animal,{
name:'i am a dog',
jump:'dog jumpping'
}); var dog = new Dog;
console.info(dog.type);
console.info(dog.name);在这里就不再对inherit这个函数进行具体的解释,读者能够自行分析,在这里Dog 继承了Animal。那么Dog创建出来的对象dog自然的就有了Animal中的各个属性。
js 继承概述的更多相关文章
- js继承
js继承有5种实现方式: 继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function ...
- js继承之call,apply和prototype随谈
在js中,call,apply和prototype都可以实现对象的继承,下面我们看一个例子: function FatherObj1() { this.sayhello = "I am jo ...
- js继承精益求精之寄生式组合继承
一.混合/组合继承的不足 上一篇JS继承终于混合继承,认真思考一下,发现其还是有不足之处的: 空间上的冗余:在使用原型链的方法继承父类的原型属性(Animal.prototype)的同时,也在子类的原 ...
- 老生常谈--Js继承小结
一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.net/stoy ...
- Js继承小结
Js继承小结 一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.n ...
- js继承实现
JS实现继承可以分为:对象冒充和原型链继承 其中对象冒充又包括:临时变量,call 和 apply 临时变量方法: function Person(name,sex){ this.name = nam ...
- js继承之借用构造函数继承
我的上一篇文章介绍了,原型链继承模式.但是单纯的原型链模式并不能很好地实现继承. 一.原型链的缺点 1.1 单纯的原型链继承最大的一个缺点,来自于原型中包含引用类型的值. 本来,我们没有通过原型链实现 ...
- js继承之原型链继承
面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法. 一.构造函数.原型与实例之间的关系 每创建一个函数,该函数就会自动带有一个 prototype 属性.该属性是个指针, ...
- js继承的常用方法
写在前面的话:这篇博客不适合对面向对象一无所知的人,如果你连_proto_.prototype...都不是很了解的话,建议还是先去了解一下JavaScript面向对象的基础知识,毕竟胖子不是一口吃成的 ...
随机推荐
- 关于php上传文件过大的表单回填
也许标题有点绕口,有点无法让人理解.请原谅博主,语文学的不好,都赖体育老师. 问题场景重现:在某次迭代中,接到这样一个需求:当新建或编辑一个Bug(包含附件以及其他字段)上传附件过大时,退回到编辑页面 ...
- Java实现杨辉三角形
Java实现杨辉三角形 一.源代码:YFTriangle.java package cn.com.zfc.day009; import java.util.Scanner; /** * 打印杨辉三角形 ...
- bzoj4974 字符串大师 KMP
明显的,有$next[i] = i - pre[i]$ 根据$next[i]$构造比根据$pre[i]$简单 如果$next[i] \neq 0$,那么我们可以直接取前面的结果 否则,我们可以暴力的寻 ...
- nginx与Lua执行顺序
Nginx顺序 Nginx 处理每一个用户请求时,都是按照若干个不同阶段(phase)依次处理的,而不是根据配置文件上的顺序. Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 ...
- ProtoBuffer使用笔记
ProtoBuffer是由谷歌研发的对象序列化和反序列化的开源工具,ProtoBuffer和Xml类似,都是数据描述工具,后者使用更为广泛,前者Google内部使用且具有更高的效率.该工具安装和使用都 ...
- git pull的时候出错: Git Couldn't reserve space for cygwin's heap
具体: 1. 运行CMD,以管理员身份打开 2. 运行:rebase.exe -b 0x50000000 msys-1.0.dll 再次git pull的时候,不再报错 转自:http://doc.o ...
- 长城小主机GW1等型号进BIOS的设置方法
主板型号 1.进BIOS办法 2.BIOS下设置U盘启动 3.主板设置上电启动 4.主要是否具有快速U盘启动功能 5.定时开机设置 945GMS Ctrl+Alt+F1(注意:自检响铃后,再按) 在B ...
- Syncthing -- 开源的云储存和同步服务工具
Syncthing -- an open-source file synchronization client/server application Syncthing是一个开源的云存储和同步服务工 ...
- SQLite 客户端管理工具
SQLite 客户端管理工具 SQLite Expert Personal 3.5.79.2499 下载地址:http://www.onlinedown.net/soft/117987.htm SQL ...
- 【IDEA】【maven】idea使用maven插件 打包提示找不到符号找不到类,但是却没有错误
[本篇方法如果无效,请使用终极解决方法] [终极解决方法]:https://www.cnblogs.com/sxdcgaq8080/p/10117852.html 如下,在右侧maven工具中进行打包 ...