上文讲述过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. 理解Django的makemigrations和migrate

    在你改动了 model.py的内容之后执行下面的命令: python manger.py makemigrations 相当于在该app下建立 migrations目录,并记录下你所有的关于modes ...

  2. python开发_csv(Comma Separated Values)_逗号分隔值_常用导入导出格式_完整版_博主推荐

    ## 最近出了一趟差,是从20号去的,今天回来...# 就把最近学习的python内容给大家分享一下...#''' 在python中,CSV(Comma Separated Values),从字面上面 ...

  3. Hibernate与MyBatis的对比总结

    最近做了一个Hibernate与MyBatis的对比总结,希望大家指出不对之处. 第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出 ...

  4. JS简单实现二级联动菜单

    <form method="post" action=""> 省/市:<select id="province" onch ...

  5. 通过adb shell操作android真机的SQLite数据库

    要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该 ...

  6. Namespace declaration statement has to be the very first statement in the script

    php 中 Namespace declaration statement has to be the very first statement in the script 错误解决方法: 在PHP文 ...

  7. [Asp.net MVC]Bundle合并,压缩js、css文件

    摘要 在web优化中有一种手段,压缩js,css文件,减少文件大小,合并js,css文件减少请求次数.asp.net mvc中为我们提供一种使用c#代码压缩合并js和css这类静态文件的方法. 一个例 ...

  8. 我对NHibernate的感受(1):对延迟加载方式的误解

    NHibernate是.NET平台上最著名的ORM框架,虽说出身于Java平台上的Hibernate,但是从外部看来这几乎就是一个.NET平台上的原生产品:有自己的社区,有自己的用户,有自己的商业支持 ...

  9. CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

    CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...

  10. UILabel混合显示动画效果

    UILabel混合显示动画效果 效果 源码 https://github.com/YouXianMing/Animations // // MixedColorProgressViewControll ...