抽象類中子類為什么不能調用父類的非抽象方法?
function?DetectorBase()?{
????throw?new?Error('Abstract?class?can?not?be?invoked?directly!');
}
DetectorBase.detect?=?function()?{
????console.log('Detection?starting...');
}
DetectorBase.stop?=?function()?{
????console.log('Detection?stopped.');
};
DetectorBase.init?=?function()?{
????throw?new?Error('Error');
}
//var?d?=?new?DetectorBase();//?Uncaught?Error:?Abstract?class?can?not?be?invoked?directly!
function?LinkDetector()?{}
LinkDetector.prototype?=?Object.create(DetectorBase.prototype);
LinkDetector.prototype.constructor?=?LinkDetector;
var?l?=?new?LinkDetector();
console.log(l);?//LinkDetector?{}__proto__:?LinkDetector
l.detect();?//Uncaught?TypeError:?l.detect?is?not?a?function
l.init();?//Uncaught?TypeError:?l.init?is?not?a?function主要是倒數第二行代碼。為什么會報錯,這里不是應該執行的嗎?控制臺應該輸出?Detection starting... 嗎?
---
我把老師的代碼補全,實例化,調用了一下,為什么沒有成功呢?
2015-06-17
你上面給DetectorBase.detect = func.....
只是給DetectorBase這個function對象賦予了 方法,而不是給DetectorBase(或者說是子類的實例)的實例賦予了方法,如果想給實例賦予方法 必須寫成 DetectorBase.prototype.detect = function......
2015-06-17
你上面的賦值方法,僅僅是給 DetectorBase這一個function對象添加了方法,記住 實例化 的對象 的__proto__屬性是指向 所屬類 的 prototype 屬性,要想給所有的 實例對象添加方法,就必須給所屬類的原型鏈添加方法