kujian/daily-interview-question

第五题:说说call()、apply()、bind()的使用和区分?

kujian opened this issue · 5 comments

var obj = {}//定义一个空的对象
function f(x,y){
console.log(x,y)
console.log(this) //this指向
}

刚好之前写过两篇文章,看完可以比较好的回答这个面试题
面试官问:能否模拟实现JS的bind方法
面试官问:能否模拟实现JS的call和apply方法

zxjzx commented

call,apply,bind的作用?

共同点:

  • 改变this的指向

不同点:

  • call 跟数组元素 **.call(obj,1,2,3,4,5)
  • apply 跟数组 **.apply(obj,[1,2,3,4,5])
  • bind 不能立即调用,需要加()调用 **.bind(obj)(1,2,3,4,5)

举例

function fun(name,age){
    console.log(name,age);
    console.log(this)
}

let obj = {name:'jj',age:18};

fun('zz',12); // this指向window

fun.call(obj,'jj',18); //this指向obj
fun.apply(obj,['jj',18]); //this指向obj
fun.bind(obj)('jj',18); //this指向obj

@zxjzx callapply用法写反了~

zxjzx commented

@zxjzx callapply用法写反了~

thanks