javascript繼承機制

2021-06-21 02:58:23 字數 1051 閱讀 3478

一、call:在子類中,用父類.call(this, arg0, arg1, arg2..)可以繼承父類。注意call的位置,盡量在子類的第一行(js按順序執行,放在後面可能對子類的其它屬性、方法有影響。比如子類和父類有相同名字的方法,後面的覆蓋前面的)。

馬上**:

【分析】單純使用call這種類式繼承,對原型方法不起作用。

**呈上:

三、prototype:類.prototype可以為類的所有例項新增屬性或方法

**如下:

【分析】

1、通過prototype為類新增屬性是不方便的,因為建構函式已經固定,例項化時無法對新加入的屬性進行初始化。比如上例中的school屬性,在新建student物件時,無法通過new student(name, no, age, school)進行初始化,很不方便。所以一般都用prototype為類新增方法。

2、類的靜態屬性優先順序高於類的原型屬性

使用prototype進行繼承時,還存在著一些問題,比如下面介紹的示例中:

student.prototype = new person();

這裡無法加入引數,因為一旦加入引數則所有的student示例的name和age都是固定的值。這種情況下就需要用call和prototype進行聯合。

**如下:

【分析】undefined的原因:student的name、age沒有從引數中獲得(兩個屬性要在person的建構函式中獲得),但是prototype的建構函式無引數

四、call和prototype聯合:解決了使用prototype不能使用帶參建構函式的問題。在父類中,只定義屬性字段,通過prototype為類新增方法。在子類中,通過call來呼叫父類帶參建構函式,通過 子類.prototype = new 父類()來繼承父類的方法。

實現**如下:

五、繼承之後的型別:用call繼承,型別並沒有發生變化;用prototype繼承,型別也繼承父類。詳見下面示例

javascript基於原型的繼承機制

請區分兩個物件 function物件及原型物件 以object為例 每個函式本身就是乙個建構函式 每個函式又對應乙個原型物件 1 當建立乙個變數時 var aa new object 等價於var aa aa.name fjs console.log aa.proto object.prototyp...

JavaScript 繼承 組合繼承

繼承 組合繼承 組合繼承也叫做偽經典繼承,指的是將原型鏈和借用建構函式的技術組合到一塊,從而發揮二者之長的一種繼承模式。組合繼承的基本思路是使用原型鏈實現對原型屬性和和方法的繼承,而通過借用建構函式來實現對例項屬性的繼承。組合繼承通過在原型上定義方法實現了函式復用,又能夠保證每個例項都有它自己的屬性...

javascript多重繼承

function employee name,job,born function house 這個是新的類 employee.prototype.salary 50000 基本工資 employee.prototype.house new house var bob new employee bil...