1.call
作用:改变this的指向
语法:函数名.call(this的指向,参数1,参数2);
2.apply
作用:改变this的指向
语法:函数名.apply(this的指向,[参数1,参数2]); 传递的参数是数组
call与apply的作用,及区别
作用:改变this的指向
区别:apply参数需要以数组的形式传递
apply使用max找最大值
因为max不能用数组做参数,而apply传递的参数是数组
var arr=[1,23,4,5,,6,77,2]
console.log(Math.max.apply(指向随意,arr))
sort找最大值
for找最大值假设第一个就是最大值
//例子
var obj1 = {
"name":"丛继永",
"toString":function(){
console.log(this.name);
}
}
var obj2 = {
"name":"五五"
}
//修改obj1函数指向obj2
obj1.toString.call(obj2) //五五
var name = "java"
//全局变量和函数都指向window
var t = obj1.toString; //this指向window
t(); //java
3.bind
- 不会调用原来的函数,可以改变原来函数内部的this指向
- 返回的是原函数改变this后产生的新函数
- 如果有的函数我们不需要立即调用,但是又把想改变这个函数内部的this指向,此时用bind
- 我们有一个按钮,当我们点击了之后,就禁用这个按钮,3秒钟之后开启这个按钮
var btn = document.querySelector('button');
btn.onclick = function(){
this.disabled = true; //这个this指向的是btn这个按钮
// var that = this;
setTimeout(function(){
//定时器函数里面的this指向的是window
this.disabled = false; //此时指向的是btn
}.bind(this),3000) //这个this指向的是btn 这个对象
}
多个按钮指向
var btns = document.querySelectorAll("button");
for(var i = 0;i<btns.length;i++){
btn[i].onclick = function(){
this.disabled = true;
setTimeout(function(){
this.disabled = false
}.bind(this),200);
}
}