javascript面向对象包装类Class封装类库剖析(5)


varCat=newClass({
initialize:function(name){
this.name=name;
}
});
varmyCat=newCat('Micia');
alert(myCat.name);//alerts'Micia'
varCow=newClass({
initialize:function(){
alert('moooo');
}
});


b、继承的实现

复制代码 代码如下:


varAnimal=newClass({
initialize:function(age){
this.age=age;
}
});
varCat=newClass({
Extends:Animal,
initialize:function(name,age){
this.parent(age);//callsinitalizemethodofAnimalclass
this.name=name;
}
});
varmyCat=newCat('Micia',20);
alert(myCat.name);//alerts'Micia'.
alert(myCat.age);//alerts20.


c、扩充类的实现

复制代码 代码如下:


varAnimal=newClass({
initialize:function(age){
this.age=age;
}
});
varCat=newClass({
Implements:Animal,
setName:function(name){
this.name=name
}
});
varmyAnimal=newCat(20);
myAnimal.setName('Micia');
alert(myAnimal.name);//alerts'Micia'.


五、悟透javascript:语法甘露
先看用法实例
a、创建类

复制代码 代码如下:


//创建类Person
varPerson=Class(object,{
Create:function(name,age){
this.name=name;
this.age=age;
},
SayHello:function(){
alert("Hello,I'm"+this.name+","+this.age+"yearsold.");
}
});
varBillGates=New(Person,["BillGates",53]);
BillGates.SayHello();


b、继承类

复制代码 代码如下:


//Employee继承Person
varEmployee=Class(Person,{
Create:function(name,age,salary){
Person.Create.call(this,name,age);
//调用基类的构造函数
this.salary=salary;
},
ShowMeTheMoney:function(){
alert(this.name+"$"+this.salary);
}
});
varSteveJobs=New(Employee,["SteveJobs",53,1234]);
SteveJobs.SayHello();
SteveJobs.ShowMeTheMoney();


下面是源码分析:显然,多了一个New方法,创建类和新建类的实例都被巧妙的封装了。形成了一个有意义的整体!还有一点不同的地方,所有的类都基于字面量,而不是基于函数。代码很简短,但其中原理却很丰富也很巧妙,可以细细品味一番!

复制代码 代码如下:


//创建类的函数,用于声明类及继承关系
functionClass(aBaseClass,aClassDefine){
//创建类的临时函数壳
functionclass_(){
this.Type=aBaseClass;
//我们给每一个类约定一个Type属性,引用其继承的类
for(varmemberinaClassDefine)
this[member]=aClassDefine[member];
//复制类的全部定义到当前创建的类
};
class_.prototype=aBaseClass;
returnnewclass_();
};
//创建对象的函数,用于任意类的对象创建
functionNew(aClass,aParams){
//创建对象的临时函数壳
functionnew_(){
this.Type=aClass;
//我们也给每一个对象约定一个Type属性,据此可以访问到对象所属的类
if(aClass.Create)
aClass.Create.apply(this,aParams);
//我们约定所有类的构造函数都叫Create,这和DELPHI比较相似
};
new_.prototype=aClass;
returnnewnew_();
};


由于写的比较笼统,可能有很多地方没有解析到,也可能有不准确的地方,还望指正。
看完上面几种解析,相信息自己也可以写出一个自己的封装类库出来,至于,怎么实现看个人喜好了。但基本的思都是一样的基于原型的继承方式和循环拷贝新方法。

原文来自:穆乙

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddgyf.html