很大一部分的js開發(fā)者都不能完全掌握原型的繼承問題。下面具一個(gè)例子來說明:
BaseObject = function(name) {
if(typeof name !== "undefined")
{ this.name = name; }
else
{ this.name = 'default' } };
這段代碼看起來很簡(jiǎn)單。如果你有name值,則使用它。如果沒有,則使用 ‘default’:
var firstObj = new BaseObject();
var secondObj = new BaseObject('unique');
console.log(firstObj.name); // -> 結(jié)果是'default'
console.log(secondObj.name); // -> 結(jié)果是 'unique'
但是如果我們執(zhí)行delete語句呢:
delete secondObj.name;
我們會(huì)得到:
console.log(secondObj.name); // -> 結(jié)果是 'undefined'
但是如果能夠重新回到 ‘default’狀態(tài)不是更好么? 其實(shí)要想達(dá)到這樣的效果很簡(jiǎn)單,如果我們能夠使用原型繼承的話:
BaseObject = function (name)
{ if(typeof name !== "undefined")
{ this.name = name; } };
BaseObject.prototype.name = 'default';
在這個(gè)版本中, BaseObject 繼承了原型中的name 屬性, 被設(shè)置為了 'default'.。這時(shí),如果構(gòu)造函數(shù)被調(diào)用時(shí)沒有參數(shù),則會(huì)自動(dòng)設(shè)置為 default。相同地,如果name 屬性被從BaseObject移出,系統(tǒng)將會(huì)自動(dòng)尋找原型鏈,并且獲得 'default'值:
`var thirdObj = new BaseObject('unique');
console.log(thirdObj.name);
delete thirdObj.name;
console.log(thirdObj.name); // -> 結(jié)果是 'default'`
更多建議: