call()跟apply() 改變this指向
阿新 • • 發佈:2018-12-09
-
call跟applay
call();跟執行函式()是一樣的效果 test.call()相當於test()
call()跟apply()都是改變this的指向
兩者區別 傳參列表不同
Fun.call(新this指向,引數1,引數2,引數3,……)
Fun.apply(新this指向,用物件形式傳參)
// 場景:當生產車間,需要用到別人的零件, // 可以用call或apply將別人的函式拿過來為自己所用 // 如這是車座部件 function Sit(h,w){ this.carHeight = h; this.carWidth = w; } // 車顏色 function Color(c){ this.carColor = c; } // 車輪 function Wheel(size){ this.size = size; } // 這是車間 function Car(name,h,w,c,size){ // 自己的東西 this.name = name; // 直接拿別人的部件來用 Sit.call(this,h,w);//這裡的this,就將原本Sit的this指向改為了Car本身 Wheel.call(this,size); Color.call(this,c); } var car = new Car('我的車',100,100,'綠色','超大'); // 使用apply function Car2(name,h,w,c,size){ // 自己的東西 this.name = name; // 直接拿別人的部件來用 apply傳參必須是物件的形式 [] {}等 Sit.apply(this,[h,w]);//這裡的this,就將原本Sit的this指向改為了Car2本身 Wheel.apply(this,[size]); Color.apply(this,[c]); } var car1 = new Car2('我的車',100,100,'綠色','超大');