1.call apply bind 的作用和区别
作用:
都可以改变函数内部的this指向。
区别点:
1.call和apply会调用函数,并且改变函数内部this指向。
2.call和apply传递的参数不一样,call传递参数arg1,arg2..形式apply必须数组形式[arg]
3.bind不回调用函数,可以改变函数内部this指向。
解析:
call方法
改变函数内部this指向
call()方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的this指向。
写法:fun.call(thisArg,arg1,arg3,...)//thisArg为想要指向的对象,arg1,arg3为参数
call的主要作用页可以实现继承
function Person(uname,age){
this.uname = uname
this.age = age
}
function Son(uname,age){
Person.call(this,uname,age)
}
var son = new Son("zhang",12)
console.log(son)
apply()方法
apply()方法调用一个函数。简单理解为调用函数的方法,但是它可以改变函数的this指向
写法:fun.apply(thisArg,[argsArray])
apply的主要应用,比如可以利用apply可以求得数组中最大值
const arr = [1,22,3,44,5,66,7,88,9]
const max = Math.max.apply(Math,arr)
console.log(max)
bind()方法
bind()方法不回调用函数,但是能改变函数内部this指向
写法:fun.bind(thisArg,arg1,arg2,...)
thisArg:在fun函数运行时指定的this值
arg1,arg2:传递的其他参数
返回由指定的this值和初始化参数改造的原函数拷贝
var o = {
name:"lisa"
};
function fn(){
console.log(this)
}
var f = fn.bind(o)
f()
bind应用
如果有的函数我们不需要立即调用,但是又需要改变这个函数的this指向,此时用bind再合适不过了
const btns = docment.querySelectorAll("button");
for(let i = 0;i
扩展:
主要应用场景:
1.call经常做继承。
2.apply经常跟数组有关系,比如借助于数学对象实现数组最大值最小值。
3.bind不调用函数,但是海想改变this指向,比如改变定时器内部的this指向。