亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

抽象類中子類為什么不能調用父類的非抽象方法?

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... 嗎?

---

我把老師的代碼補全,實例化,調用了一下,為什么沒有成功呢?

正在回答

2 回答

你上面給DetectorBase.detect = func.....

只是給DetectorBase這個function對象賦予了 方法,而不是給DetectorBase(或者說是子類的實例)的實例賦予了方法,如果想給實例賦予方法 必須寫成 DetectorBase.prototype.detect = function......

0 回復 有任何疑惑可以回復我~
#1

再不努力就是純屌絲 提問者

非常感謝!
2015-06-17 回復 有任何疑惑可以回復我~
#2

再不努力就是純屌絲 提問者

那老師講這里的時候,雖然沒有深入講完,但是他是不是代碼寫的不太對?
2015-06-17 回復 有任何疑惑可以回復我~
#3

Will丶Lee 回復 再不努力就是純屌絲 提問者

嗯嗯, 是的,估計是做ppt的時候沒注意到吧
2015-06-18 回復 有任何疑惑可以回復我~
#4

再不努力就是純屌絲 提問者 回復 Will丶Lee

恩,謝謝!
2015-06-19 回復 有任何疑惑可以回復我~
查看1條回復

你上面的賦值方法,僅僅是給 DetectorBase這一個function對象添加了方法,記住 實例化 的對象 的__proto__屬性是指向 所屬類 的 prototype 屬性,要想給所有的 實例對象添加方法,就必須給所屬類的原型鏈添加方法

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JavaScript深入淺出
  • 參與學習       281093    人
  • 解答問題       1054    個

由淺入深學習JS語言特性,且解析JS常見誤區,從入門到掌握

進入課程

抽象類中子類為什么不能調用父類的非抽象方法?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號