上文讲述过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中的各个属性。




最新文章

  1. MySQL 子查询与连接操作笔记
  2. WebConfig 详解
  3. ipc之消息队列
  4. C语言函数参数既做出参又做入参的代表
  5. HDU更多的学校比赛9场 HDU 4965Fast Matrix Calculation【矩阵运算+数学技巧】
  6. [原创]Jquery实现表格内容点击隐藏显示内容
  7. WebGL学习(1) - 三角形
  8. CentOS6.x机器安装Azure CLI2.0【2】
  9. DataX通过纯Java代码启动
  10. 毕业回馈--89C51keil工程的创建
  11. 解决mysql中只能通过localhost访问不能通过ip访问的问题
  12. 利用redis + lua解决抢红包高并发的问题
  13. Linux发行版:CentOS、Ubuntu、RedHat、Android、Tizen、MeeGo
  14. 第一册:lesson fifty three。
  15. TCP TIME_WAIT过多的解决方法
  16. 字节、字、bit、byte的关系【转】
  17. 001.Heartbeat简介
  18. eclipse中html编辑环境的搭建
  19. zTree实现权限列表简单实例
  20. python opencv3 FLANN单应性匹配

热门文章

  1. LuoguP5017 摆渡车 $dp$
  2. bzoj 3211 线段树
  3. zoj 3229 上下界网络最大可行流带输出方案
  4. bzoj 3931 最短路+最大流
  5. C# 传统的ToString
  6. ActiveMQ Cluster (ActiveMQ 集群) 配置
  7. windows组策略和共享
  8. MySQL的mysql.sock文件作用(转)
  9. 关于ClickOnce的一些技术文章
  10. 用最简单的例子理解模板方法模式(Template Method Pattern)