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

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

求下面兩段代碼怎么理解?

!function(global){ //用函數包裹以防止基類的變量和函數在外部被更改

function DetectorBase(config)

{

if(!this instanceof DetectorBase){

throw new Error("Do't invoke without new.");

}

this.config = config;

this.analyze();

}


DetectorBase.prototype.detect = function(){

throw new Error("not implemented");

}

如上所示,就是老師前2段代碼,沒理解,第一段代碼在function DetectorBase(){}外層添加了立即執行函數,按照注釋:用函數包裹以防止基類的變量和函數在外部被更改,為什么這么說?不是說函數內部實現的屬性和方法都屬于局部變量離開這個函數都會銷毀,為什么還要額外在外層添加這個立即執行函數?

問題二;既然是立即執行函數函數其結構應為(function(參數){//do sth})(),為什么沒有圓括號?

問題三:對于立即執行函數里的參數global是干什么用的,不添加該參數會怎樣?

問題四:

DetectorBase.prototype.detect = function(){

throw new Error("not implemented");

}

這個拋出是為了什么?后邊的錯誤拋出全是為了如果不是構造器new出來的新對象,則拋出錯誤;此處的拋出錯誤是為了什么?

正在回答

4 回答

問題1:可以在函數外部通過defineproperty的方法添加、修改函數中的屬性,所以是不安全的。

這是我的理解,不知道對不對~

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

我的理解,問題四:DetectorBase作為基類在proptype對象上定義了一個抽象方法detect并拋出一個異常,當子類繼承了父類后,如果沒有去定義detect方法,那么會通過原型鏈向上查找到父類的detect方法,拋出一個異常。如果子類定義了detect方法,那么就不會從原型鏈向上查找父類的方法。

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

慕村9107202

應該是類似于java中方法的重寫
2018-03-18 回復 有任何疑惑可以回復我~

問題1: 因為javascript語言是沒有塊級作用域的。請看javascript高級程序設計第76頁。

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

只能回答問題二:?。ǎ﹞}同等于(function(){})

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

慕粉3988711 提問者

謝謝啊,剩下三個我在等等
2016-10-24 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

求下面兩段代碼怎么理解?

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

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

幫助反饋 APP下載

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

公眾號

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