求下面兩段代碼怎么理解?
!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出來的新對象,則拋出錯誤;此處的拋出錯誤是為了什么?
2020-12-22
問題1:可以在函數外部通過defineproperty的方法添加、修改函數中的屬性,所以是不安全的。
這是我的理解,不知道對不對~
2018-03-18
我的理解,問題四:DetectorBase作為基類在proptype對象上定義了一個抽象方法detect并拋出一個異常,當子類繼承了父類后,如果沒有去定義detect方法,那么會通過原型鏈向上查找到父類的detect方法,拋出一個異常。如果子類定義了detect方法,那么就不會從原型鏈向上查找父類的方法。
2017-02-21
問題1: 因為javascript語言是沒有塊級作用域的。請看javascript高級程序設計第76頁。
2016-10-23
只能回答問題二:?。ǎ﹞}同等于(function(){})