JavaScript面向对象特性实践一
javaScript 在构造类的时候有好几种方法,每种方法特点是不一样的。
1.构造/原型法
var
BankCard
=
function
(cardId,cardPassword)
...
{
this.cardId=cardId; //银行卡NO
this.cardPassword=cardPassword;// 银行卡密码
this.balance=100; //银行卡余额
}
BankCard.prototype = ... {
queryBalance:function()...{
return this.balance;
},
setBalance:function(value)...{
this.balance=this.balance+value;
},
setPassword:function(password)...{
this.cardPassword=password;
}
}
function invoke(fun,value) ... {
fun.setBalance(value);
balance=fun.queryBalance();
alert(balance);
}
// 实例化一个银行卡对象
var objBankCard = new BankCard( ' admin ' , ' admin ' );
// 传递对象引用,调用对象成员方法
invoke(objBankCard, 200 );
// -->
this.cardId=cardId; //银行卡NO
this.cardPassword=cardPassword;// 银行卡密码
this.balance=100; //银行卡余额
}
BankCard.prototype = ... {
queryBalance:function()...{
return this.balance;
},
setBalance:function(value)...{
this.balance=this.balance+value;
},
setPassword:function(password)...{
this.cardPassword=password;
}
}
function invoke(fun,value) ... {
fun.setBalance(value);
balance=fun.queryBalance();
alert(balance);
}
// 实例化一个银行卡对象
var objBankCard = new BankCard( ' admin ' , ' admin ' );
// 传递对象引用,调用对象成员方法
invoke(objBankCard, 200 );
// -->
2.工厂方式
function
BankCard(cardId,cardPassword,balance)
...
{
var objBankCard=new Object();
objBankCard.cardId=cardId;
objBankCard.cardPassword=cardPassword;
objBankCard.balance=balance;
objBankCard.queryBalance=function()...{
return this.balance;
};
objBankCard.setBalance=function(value)...{
this.balance=this.balance+value;
};
objBankCard.setPassword=function(password)...{
this.cardPassword=password;
};
return objBankCard;
}
var obj = new BankCard( " admin " , " admin " , 100 );
alert(obj.queryBalance());
var objBankCard=new Object();
objBankCard.cardId=cardId;
objBankCard.cardPassword=cardPassword;
objBankCard.balance=balance;
objBankCard.queryBalance=function()...{
return this.balance;
};
objBankCard.setBalance=function(value)...{
this.balance=this.balance+value;
};
objBankCard.setPassword=function(password)...{
this.cardPassword=password;
};
return objBankCard;
}
var obj = new BankCard( " admin " , " admin " , 100 );
alert(obj.queryBalance());
3.构造函数方式
function
BankCard(cardId,cardPassword,balance)
...
{
this.cardId=cardId;
this.cardPassword=cardPassword;
this.balance=balance;
this.queryBalance=function()...{
return this.balance;
};
this.setBalance=function(value)...{
this.balance=this.balance+value;
};
this.setPassword=function(password)...{
this.cardPassword=password;
};
}
var obj = new BankCard( " admin " , " admin " , 100 );
alert(obj.queryBalance());
this.cardId=cardId;
this.cardPassword=cardPassword;
this.balance=balance;
this.queryBalance=function()...{
return this.balance;
};
this.setBalance=function(value)...{
this.balance=this.balance+value;
};
this.setPassword=function(password)...{
this.cardPassword=password;
};
}
var obj = new BankCard( " admin " , " admin " , 100 );
alert(obj.queryBalance());
4.原型方式
//
原型方式
function BankCard() ... {
}
BankCard.prototype.carId = " admin " ;
BankCard.prototype.cardPassword = " admin " ;
BankCard.prototype.balance = 100 ;
BankCard.prototype.queryBalance = function () ... {
return this.balance;
} ;
BankCard.prototype.setBalance = function (value) ... {
this.balance=this.balance+value;
} ;
BankCard.prototype.setPassword = function (password) ... {
this.cardPassword=password;
} ;
var obj = new BankCard();
alert(obj.queryBalance());
function BankCard() ... {
}
BankCard.prototype.carId = " admin " ;
BankCard.prototype.cardPassword = " admin " ;
BankCard.prototype.balance = 100 ;
BankCard.prototype.queryBalance = function () ... {
return this.balance;
} ;
BankCard.prototype.setBalance = function (value) ... {
this.balance=this.balance+value;
} ;
BankCard.prototype.setPassword = function (password) ... {
this.cardPassword=password;
} ;
var obj = new BankCard();
alert(obj.queryBalance());
在日常的工作当中,推荐大家是由"构造/原型"法或"原型"法。