一、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...