上文讲述过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 继承概述的更多相关文章

  1. js继承

    js继承有5种实现方式: 继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function ...

  2. js继承之call,apply和prototype随谈

    在js中,call,apply和prototype都可以实现对象的继承,下面我们看一个例子: function FatherObj1() { this.sayhello = "I am jo ...

  3. js继承精益求精之寄生式组合继承

    一.混合/组合继承的不足 上一篇JS继承终于混合继承,认真思考一下,发现其还是有不足之处的: 空间上的冗余:在使用原型链的方法继承父类的原型属性(Animal.prototype)的同时,也在子类的原 ...

  4. 老生常谈--Js继承小结

    一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.net/stoy ...

  5. Js继承小结

    Js继承小结 一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.n ...

  6. js继承实现

    JS实现继承可以分为:对象冒充和原型链继承 其中对象冒充又包括:临时变量,call 和 apply 临时变量方法: function Person(name,sex){ this.name = nam ...

  7. js继承之借用构造函数继承

    我的上一篇文章介绍了,原型链继承模式.但是单纯的原型链模式并不能很好地实现继承. 一.原型链的缺点 1.1 单纯的原型链继承最大的一个缺点,来自于原型中包含引用类型的值. 本来,我们没有通过原型链实现 ...

  8. js继承之原型链继承

    面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法. 一.构造函数.原型与实例之间的关系 每创建一个函数,该函数就会自动带有一个 prototype 属性.该属性是个指针, ...

  9. js继承的常用方法

    写在前面的话:这篇博客不适合对面向对象一无所知的人,如果你连_proto_.prototype...都不是很了解的话,建议还是先去了解一下JavaScript面向对象的基础知识,毕竟胖子不是一口吃成的 ...

随机推荐

  1. Redis在Window服务下的安装

    Redis 安装 1.首先在Windows下下载安装Redis 下载地址:https://github.com/MicrosoftArchive/redis/releases 根据你电脑系统的实际情况 ...

  2. [POI2015]Pieczęć

    [POI2015]Pieczęć 题目大意: 一张\(n\times m(n,m\le1000)\)的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个\(a\times b(a,b\l ...

  3. 轻巧的编辑器:Sublime Text3 user设置

    开发到现在,编辑器倒用过不少,VIM.zend.my eclipse.EPP.editplus.notepad++.sublime text 2. 最初使用sublime是同学推荐的,说其何其的好,何 ...

  4. poj 2777 线段树 区间更新+位运算

    题意:有一个长板子,分成多段,有两种操作,第一种是C给从a到b那段染一种颜色c,另一种是P询问a到b有多少种不同的颜色.Sample Input2 2 4  板长 颜色数目 询问数目C 1 1 2P ...

  5. Codeforces Round #288 (Div. 2) C. Anya and Ghosts 模拟 贪心

    C. Anya and Ghosts time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. 双频无线网安装设置(5g ) for linux

    为了在局域网实现远程wifi调试,例如调试需要图像数据传输,则需要搭建局域网5g无线网络. 1.硬件要求 a. TP-Link(型号:TL-WDR6500,AC1300双频无线路由器,支持5g,2.4 ...

  7. Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  8. Git_工作区和暂存区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory):就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...

  9. maven里如何根据不同的environment打包

    一个项目里总会有很多配置文件.而且一般都会有多套环境.开发的.测试的.正式的.而在这些不同的环境这些配置的值都会不一样.比如mail的配置.服务的url配置这些都是很常见的.所以在打包的时候就要根据e ...

  10. C++空类产生哪些成员函数 || C++类可以自动生成的6个成员函数

    class Empty {     public:     Empty(); // 缺省构造函数     Empty( const Empty& ); // 拷贝构造函数     ~Empty ...