JavaScript 語言精粹讀書筆記 第五章

2021-06-28 04:21:07 字數 1264 閱讀 6313

當乙個函式物件被建立的時候,function構造器產生的函式物件會執行型別這樣一些**:

this.prototype=;
新函式物件被賦予乙個prototype屬性,並且其值包含乙個constructor屬性且屬性值為該新函式物件。 當使用new關鍵字去呼叫乙個函式時,將修改函式的執行方式。 大致會執行以下幾個過程:

建立乙個新物件,繼承自函式物件的原型(重點,繼承非函式物件本身而是它的原型)

返回新物件

偽類方式的繼承是通過定義乙個建構函式以及替換prototype來實現的。

以下**實現偽類繼承 定義person類建構函式以及定義getname方法

var person= function (name) 

person.prototype.getname=function()

定義學生類建構函式並繼承person獲得getname方法

var student=function(name,num)

student.prototype=new person();

student.prototype.getnum= function ()

這種繼承方式,所有屬性可以被隨意修改,並且無法訪問父類的方法。

基於原型的繼承更為簡單。使用物件字面量建立乙個物件,其他物件可以直接通過prototype即可完成繼承。

前兩種繼承方式都存在屬性對外可見的問題,而利用模組模式可以避免這種缺陷。通常需要以下幾個步驟:

建立乙個物件可以(可以使用包括new、物件字面量等任何方式)。

選擇性的定義私有變數和方法(通過var)。

給新物件擴充方法,這些方法擁有特權訪問引數以及第二步定義的私有變數。

返回新物件。

下面**使用這種方式實現繼承

var person= function (pro) ;

that.getname=function()

return that;

}

var student=function(pro)

return that;

}這種方式還避免原型方式需要重寫建構函式的麻煩,我們只需要呼叫父類建構函式,然後專注差異部分的建立。

這種繼承方式還可以呼叫父類的方法。

JavaScript語言精粹 筆記

1 物件屬性檢索 var student 要檢索name,可以用student name 或者 student.name。2 物件屬性更新 student.name wang student.nickname yu 物件之前沒有nickname屬性,則自動擴充到改物件中。3 物件的引用 var x ...

《JavaScript語言精粹》摘錄一

1 識別符號 區分大小寫 第乙個字元必須是字母 下劃線或美元符號,其他字元可以是字母 下劃線 美元符號或數字 關鍵字和保留字不可用作識別符號 關鍵字 if else catch等 保留字 abstract boolean break byte case catch char class const ...

讀js語言精粹收穫

1.js可以根據選擇跳出多層迴圈 在迴圈前加個標籤 label for var i 0 i 2 i 2.typeof運算子產生的值只有 number undefined string boolean es5的基礎資料型別少了乙個null function object 注 array和null結果都...