求下面兩段代碼怎么理解?
!function(global){ //用函數(shù)包裹以防止基類的變量和函數(shù)在外部被更改
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(){}外層添加了立即執(zhí)行函數(shù),按照注釋:用函數(shù)包裹以防止基類的變量和函數(shù)在外部被更改,為什么這么說?不是說函數(shù)內(nèi)部實(shí)現(xiàn)的屬性和方法都屬于局部變量離開這個函數(shù)都會銷毀,為什么還要額外在外層添加這個立即執(zhí)行函數(shù)?
問題二;既然是立即執(zhí)行函數(shù)函數(shù)其結(jié)構(gòu)應(yīng)為(function(參數(shù)){//do sth})(),為什么沒有圓括號?
問題三:對于立即執(zhí)行函數(shù)里的參數(shù)global是干什么用的,不添加該參數(shù)會怎樣?
問題四:
DetectorBase.prototype.detect = function(){
throw new Error("not implemented");
}
這個拋出是為了什么?后邊的錯誤拋出全是為了如果不是構(gòu)造器new出來的新對象,則拋出錯誤;此處的拋出錯誤是為了什么?
2020-12-22
問題1:可以在函數(shù)外部通過defineproperty的方法添加、修改函數(shù)中的屬性,所以是不安全的。
這是我的理解,不知道對不對~
2018-03-18
我的理解,問題四:DetectorBase作為基類在proptype對象上定義了一個抽象方法detect并拋出一個異常,當(dāng)子類繼承了父類后,如果沒有去定義detect方法,那么會通過原型鏈向上查找到父類的detect方法,拋出一個異常。如果子類定義了detect方法,那么就不會從原型鏈向上查找父類的方法。
2017-02-21
問題1: 因?yàn)閖avascript語言是沒有塊級作用域的。請看javascript高級程序設(shè)計(jì)第76頁。
2016-10-23
只能回答問題二:?。ǎ﹞}同等于(function(){})