自创js类与继承的实现
by joe
at 2010-10-20 17:53:36
original http://xiebiji.com/2010/10/%e8%87%aa%e5%88%9bjs%e7%b1%bb%e4%b8%8e%e7%bb%a7%e6%89%bf%e7%9a%84%e5%ae%9e%e7%8e%b0/
研究了一下js的面向对象编程,模拟了一下类定义和继承,尝试过用原型来做,但是总是做不了,后来用了别的方法,可能不是最好的方法,有见解的同学欢迎评论。
function dump(o){ console.log(o); } //模拟类和继承 function Class(args){ a=function(){ this.init=function(){ alert('没有为类建立初始化函数'); } //添加自定义参数 for(var p in args){ this[p]=args[p]; } //初始化的时候执行 this.init.apply(this,arguments); } a.extend=function(args){ //添加自定义参数 t=new this();//实例化一个父类,会执行父类的初始化函数 for(var p in args){ t[p]=args[p]; } return Class(t); } return a; } //定义父类 var Parent=Class({ p:1, //init为实例化时执行的初始化函数,雷同于php中的构造函数 init:function(){ this.p=4; alert(this.p); } }); //定义子类1 var Son=Parent.extend({//继承Parent类 s:2, init:function(str2){ alert(this.s); } }); //定义子类2 var Son2=Son.extend({ s2:3, init:function(str3){ alert(this.s); } }); var p=new Parent('a'); dump(p); var s=new Son('b'); dump(s); var s2=new Son2('b3'); dump(s2);
输出的结果:
与本文相关的日志
- 2008-12-22 -- 【mootools中文实例诠释】Accordion类(折叠菜单)的使用
- 2011-02-15 -- js中html字符串格式化函数
- 2010-05-27 -- 多层div相互层叠激活方法(提升z-index)
- 2010-02-18 -- 过年我也会看书的
- 2010-01-31 -- 实际上js文件放最后是个好方案,但有更好的方案