apply ,call,bind的区别
apply ,call,bind的区别
bind是返回 原函数的副本
call() 在调用的时候临时修改this 返回结果是 2个值
obj1.say.call(window, 1, 2) 传多少参就按顺序写下去
apply() obj1.say.apply(window, [1, 2]) 返回结果是 2个值
call和apply这两个方法作用是一样的,如果有参数传参不一样
var btn =document.querySelector("button");
var obj = {
name:'张宇',
say:function(){
this.style.background = "red";
console.log(arguments); //Arguments(2) [1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
}
obj.say.call(btn,1,2)
call的参数直接挨个传递即可,apply后面的参数要放到一个数组里来传递
bind() bind是在函数封装的时候来修改this指向,这种的话以后的调用this都指修改过后的this指向
var btn =document.querySelector("button");
var obj = {
name:'张宇',
say:function(){
this.style.background = "red";
console.log(arguments); //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
}
obj.say.bind(btn,1,2,3)()
bind是返回 原函数的副本,改变的是副本的this指向
以上三种方式皆可以改变this的指向 (面试题)
不过一般现在不用这三种方式,因为有了箭头函数