抽象類中子類為什么不能調(diào)用父類的非抽象方法?
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
主要是倒數(shù)第二行代碼。為什么會(huì)報(bào)錯(cuò),這里不是應(yīng)該執(zhí)行的嗎?控制臺(tái)應(yīng)該輸出?Detection starting... 嗎?
---
我把老師的代碼補(bǔ)全,實(shí)例化,調(diào)用了一下,為什么沒有成功呢?
2015-06-17
你上面給DetectorBase.detect = func.....
只是給DetectorBase這個(gè)function對(duì)象賦予了 方法,而不是給DetectorBase(或者說是子類的實(shí)例)的實(shí)例賦予了方法,如果想給實(shí)例賦予方法 必須寫成 DetectorBase.prototype.detect = function......
2015-06-17
你上面的賦值方法,僅僅是給 DetectorBase這一個(gè)function對(duì)象添加了方法,記住 實(shí)例化 的對(duì)象 的__proto__屬性是指向 所屬類 的 prototype 屬性,要想給所有的 實(shí)例對(duì)象添加方法,就必須給所屬類的原型鏈添加方法