一、JS的“类”
function a(){
var v=1;
this.getValue=function(){
return v;
}
}
var b=new a();
alert(b.getValue());
那既然有个公共函数,那私有函数呢,改造a类:
function a(){
var v=1;
setValue();
function setValue(){
v=9;
}
this.getValue=function(){
return v;
}
}
var b=new a();
alert(b.getValue());
function a(){
var v=1;
this.setValue=function (value){
v=value;
}
this.getValue=function(){
return v;
}
}
var b=new a();
b.setValue(99);
alert(b.getValue());
这时弹框为99.
二、JS的“继承”
1.prototype实现继承(原型继承)
function a(){
function getData(){
return 100;
}
this.getValue=function(){
return 123;
}
this.value=9999;
}
aa.prototype=new a();//类a的实例是aa的原型
function aa(){
}
var b=new aa();
alert(b.getValue());//弹框为123
alert(b.value);//弹框为9999
//alert(b.getData());//无法继承非公共函数
类aa中并没有getValue函数,但是aa的实例依然可以调用该函数,这便是js的原型继承。
function a(){
this.value=[100,200];
}
aa.prototype=new a();
function aa(){
}
var b=new aa();
var e=new aa();
b.value.push(300,400);
alert(b.value);//弹框100,200,300,400
alert(e.value);//弹框100,200,300,400
2.对象冒充式继承(使用call或apply函数实现)
使用js提供的call()及apply()函数实现继承。这两者的第一个参数都是要实现继承的子类对象(一般传“this”),剩下的参数略有不同:
call(this, parameter1, parameter2, parameter3... )
function a(data1,data2){
this.value=data1+data2;
}
function aa(data1,data2){
a.call(this,data1,data2);
}
function bb(data1,data2){
a.apply(this,new Array(data1,data2));
}
var b=new aa(10,20);
var e=new bb(100,200);
alert(b.value);//弹框30
alert(e.value);//弹框300
function parentA(data1,data2){
this.value=data1+data2;
}
function parentB(data1,data2){
this.value=data1*data2;
}
function aa(data1,data2){
parentA.call(this,data1,data2);
parentB.call(this,data1,data2);
}
var b=new aa(10,20);
alert(b.value);//弹框200
三、JS的封装与多态
function calc(value1,value2){
this.data1=value1;
this.data2=value2;
this.GetResult;
this.toString=function(){
if(this.GetResult)
return this.GetResult()+"";
return "0";
}
}
function sumCalc(value1,value2){
calc.call(this,value1,value2)
this.GetResult=function(){
return this.data1+this.data2;
}
}
function productCalc(value1,value2){
calc.call(this,value1,value2)
this.GetResult=function(){
return this.data1*this.data2;
}
}
var s=new sumCalc(2,3);
alert(s.toString()); //弹框5
var p=new productCalc(2,3);
alert(p.toString()); //弹框6
四、JS中的“委托”
function calc(value1,value2){
this.data1=value1;
this.data2=value2;
this.GetResult;
this.ToString=function(){
if(this.GetResult)
return this.GetResult(this.data1,this.data2)+"";
return "0";
}
}
function GetSum(value1,value2){
return value1+value2;
}
var c=new calc(2,3);
c.GetResult=GetSum;
alert(c.ToString()); //弹框为5
如上,GetResult函数被赋予了一个新函数GetSum(),当calc类执行GetResult()函数时,便会调用该委托的函数-----GetSum()。