1. 程式人生 > >call()跟apply() 改變this指向

call()跟apply() 改變this指向

  1. 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,'綠色','超大');