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