daily-interview-question icon indicating copy to clipboard operation
daily-interview-question copied to clipboard

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

Open kujian opened this issue 5 years ago • 5 comments

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

kujian avatar Apr 17 '19 09:04 kujian

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

ruochuan12 avatar Apr 17 '19 10:04 ruochuan12

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 avatar Apr 18 '19 02:04 zxjzx

@zxjzx callapply用法写反了~

ruochuan12 avatar Apr 18 '19 02:04 ruochuan12

@zxjzx callapply用法写反了~

thanks

zxjzx avatar Apr 18 '19 02:04 zxjzx

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

xgqfrms avatar Aug 27 '19 05:08 xgqfrms