抽象類中子類為什么不能調用父類的非抽象方法?
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 屬性,要想給所有的 實例對象添加方法,就必須給所屬類的原型鏈添加方法