web前端之悟透JavaScript四:JavaScript真经(甘露)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<script type="text/javascript">
function New(aClass,aParams){//通用创建函数
function new_(){//定义临时的中转函数壳
aClass.Create.apply(this.aParams);//调用原型中定义的构造函数
};
new_.prototype=aClass;//准备中转原型对象
return new new_();
};
var Person={
Create:function(name,age){//这个当构造函数
this.name=name;
this.age=age;
}
,SayHello:function(){//定义方法
alert("Hello I'm "+this.name);
}
,HowOld:function(){//定义方法
alert(this.name+" is "+this.age+" years old.");
}
};
var BillGates=New(Person,["Bill Gates",53]);
BillGates.SayHello();
BillGates.HowOld();
alert(BillGates.constructor==Object);
</script>
</head>
<body>
</body>
</html>
这里的通用函数New不但中转了原型对象,还中转了构造函数的逻辑和构造参数。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<script type="text/javascript">
var object={
isA:function(aType){
var self=this;
while(self){
if(self==aType){
return true;
}else{
self=self.Type;
}
};
return false;
}
};
function Class(aBaseClass,aClassDefine){
function class_(){
this.Type=aBaseClass;
for(var member in aClassDefine){
this[member]=aClassDefine[member];
}
};
class_.prototype=aBaseClass;
return new class_();
};
function New(aClass,aParams){
function new_(){
this.Type=aClass;
if(aClass.Create){
aClass.Create.apply(this,aParams);
}
};
new_.prototype=aClass;
return new new_();
};
var Person=Class(object,{//派生object基本类
Create:function(name,age){
this.name=name;
this.age=age;
}
,SayHello:function(){
alert("Hello,I'm "+this.name+" , "+this.age+" years old.");
}
});
var Employee=Class(Person,{
Create:function(name,age,salay){
Person.Create.call(this,name,age);//调用基类的构造函数
this.salay=salay;
}
,ShowMeTheMoney:function(){
alert(this.name+" $ "+this.salay);
}
});
var BillGates=New(Person,["Bill Gates",53]);
var SteveJobs=New(Employee,["Steve Jobs",53,1234]);
BillGates.SayHello();
SteveJobs.SayHello();
SteveJobs.ShowMeTheMoney();
var Little=New(BillGates.Type,["Little",6]);
Little.SayHello();
alert(BillGates.isA(Person));
alert(BillGates.isA(Employee));
alert(SteveJobs.isA(Person));
alert(Person.isA(Employee));
alert(Employee.isA(Person));
</script>
</head>
<body>
</body>
</html>