简单的js面向对象框架实现
新年上班第一天,闲暇之余,看了下jquery作者john resig关于继承的一些idea,顺便自己写了个简单的js继承小框架
/**
* 简单的js继承小框架
* @date 2014/2/8
* @author lsj
*/
(function(){
//基类
this.JClass=function(){
}
//继承方法(创建一个新类继承自该类)
JClass.extend=function(child)
{
var parent=new this;
var superpro=this.prototype;
//将子类的方法赋给父类的原型
for(var item in child)
{
superpro[item]=child[item];
}
//覆盖JClass基类,提供子类初始化方法入口
function JClass()
{
//如果子类有写init方法,则通过该方法进行类初始化
if(this.init)
{
this.init.apply(this,arguments);
}
}
//将子类的原型指向父类的实例(该实例的_proto_指向superpro)
JClass.prototype=parent;
//改变原型的构造函数指向
JClass.prototype.constructor=JClass;
//实现JClass的可继承
JClass.extend=arguments.callee;
return JClass;
}
})();
var Parent=JClass.extend({"name":"zhangsan","age":"10"});
var Child=Parent.extend({init:function(data){this.data=data;},"childname":"this is childname",sayHello:function(){alert(this.data)}});
var cchild=new Child("this is the initial method of child");
console.dir(cchild); //cchild的对象导图
cchild.sayHello(); //打印出this is the initial method of child