iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
自我挑戰組

開始入坑網頁吧!系列 第 20

JavaScript Call, Bind, Apply

  • 分享至 

  • xImage
  •  

Call, Bind, Apply 這些方法可以讓你去指定綁定的 this

如果沒有綁定this的話,下面的this指的是 window 物件

function aa(){
console.log(this);
console.log(this.name);
}
aa();

//Window {0: Window, window: Window, self: Window, document: document, name: '', location: //Location, …}

那麼現在來介紹能指定綁定this 的三個方法吧!

Bind 綁定某物件,讓 this 指向該物件(不過會回傳function)

function aa(){
console.log(this);
console.log(this.name);
}

let st={
name:'Ivy',
age:20
}
//注意,ff是函數
let ff=aa.bind(st);
ff();
//{name: 'Ivy', age: 20}
//Ivy

Call (與Bind 很像,不過不會回傳函數)

Untitled

**如果此函數有其他參數就寫在call的物件後面

function aa(good){
console.log(this);
console.log(this.name);
console.log(good);
}

let st={
name:'Ivy',
age:20}

aa.call(st,'444666');
//{name: 'Ivy', age: 20}
//Ivy
//444666

Apply 與 Call 很像,只是傳入的會包成陣列

function aa(good,jj){
console.log(this);
console.log(this.name);
console.log(good);
console.log(jj);
}

let st={
	name:'Ivy',
	age:20}
    
// 要傳入的參數用陣列包起來,放在要apply的物件後面
aa.apply(st,['444666',1111111]);
//{name: 'Ivy', age: 20}
// Ivy
// 444666
// 1111111

小測試:

1.哪個方法的參數要用陣列包裝?
2.哪個方法綁定時是回傳函數?

參考資料:
Runoob.com JavaScript 中 call()、apply()、bind() 的用法
MDN Function.prototype.call


上一篇
JavaScript IIFE (立即函數)
下一篇
JavaScript 閉包(Closure) 上集
系列文
開始入坑網頁吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言