構造函數繼承--call,apply
阿新 • • 發佈:2019-02-12
類函數 The 變調 原型 練習 class span ons bind
可以執行函數,可以帶入參數,可以改變調用函數中this的指向,不能用於創建函數
call方法的練習:
構造函數繼承的原理 : 通過改變this指向來實現繼承(在子類中使用call或apply的方式調用父類 讓父類中的this指向子類new出來的對象)
語法格式:
function 子類函數名(參數1,參數2){
父類函數名.call(this,參數1,參數2); //註: 實例繼承
}
function 子類函數名(參數1,參數2){
父類函數名.apply(this,arguments或者[參數1,參數2,參數3,......]); //註: 實例繼承
}
call和apply的特點:
兩個都只能繼承實例不能繼承原型,第一個參數的this都一樣,指的是當前對象. call的第二個參數開始是參數列表,apply的第二個參數是數組或者arguments
function fn3(num){ this.a = num; //obj1.a = 10 fn4(this); //調用fn4將obj1對象傳遞到fn4 } function fn4(obj){ obj.b = 10; //為obj1添加新的屬性b和c obj.c = 20; } var obj1 = {}; //定義一個對象,此時該對象沒有任何屬性 fn3.call(obj1,10); //調用fn3函數,讓該函數中的this指向obj1,並傳遞參數10 console.log(obj1); //{a:10,b:10,c:20}
apply方法練習:
function Father(tel,name,age){ this.money = 99999999; this.name = name; this.age = age; this.tel = tel; this.dance = function(){ console.log("會跳舞"); } } function Son(tel,name,age){ //在子類中使用call、或apply或bind調用父類的構造函數 並將父類中的this指向子類對象 //Father.call(this,tel,name,age); //Father.apply(this,[tel,name,age]); Father.apply(this,arguments); //在使用arguments的時候傳遞參數的順序,和接收參數的順序必須保持一致 } var son = new Son("132xx","xm",13); var son1 = new Son("133xx","xh",18); console.log( son,son1 );
構造函數繼承--call,apply