首先說明一下,對(duì)于ES6新推出的箭頭函數(shù)(() => {}
)颤绕,是無法改變this指向的纺裁,因?yàn)?strong>箭頭函數(shù)中的this在函數(shù)聲明的時(shí)候就已經(jīng)指定好了。此處說的更改this指向菩貌,是指在函數(shù)(包括匿名函數(shù) function() {})被調(diào)用時(shí)卢佣,可以更改this的指向。
假設(shè)有如下的代碼:
<body>
<div class="box"></div>
<script>
const box = document.querySelector('.box');
let a, b , c;
const obj = {
fn: function() {
console.log(this);
}
};
obj.fn();
</script>
</body>
當(dāng)執(zhí)行obj.fn()
方法時(shí)箭阶,this
的指向是window
對(duì)象虚茶。
如果我想要把this
的指向更改為box
對(duì)象,要如何做呢仇参?有三種方法可以辦到:
- 調(diào)用
call()
方法嘹叫,代碼如下:
obj.fn.call(box, a, b, c);
其第一個(gè)參數(shù)為
this
要指向的對(duì)象,其后的參數(shù)是一個(gè)列表冈敛。
- 調(diào)用
apply()
方法待笑,代碼如下:
obj.fn.apply(box, [a, b, c]);
其第一個(gè)參數(shù)為
this
要指向的對(duì)象鸣皂,第二個(gè)參數(shù)是一個(gè)由參數(shù)組成的數(shù)組抓谴。
- 調(diào)用
bind()
方法,代碼如下:
obj.fn.bind(box, a, b, c)();
bind
方法與call
方法的參數(shù)格式類似寞缝,不同的是調(diào)用bind
方法后癌压,會(huì)返回一個(gè)更改了this
指向的新函數(shù),如果要執(zhí)行荆陆,還需要在后邊添加()
來執(zhí)行滩届。
---(完)---