當乙個函式物件被建立的時候,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結果都...