基础js

call apply bind改变this

2018-03-19  本文已影响0人  该昵称注册中

call,apply,bind之间的区别

三个都是改变上下文this

用法:

var oname="小王",oage=12;

var Aobj = {
    age:this.age,
    name:'小杨',
    Afn:function(from,go){
        console.log(this.name+"有"+this.oage+'岁'+'来自'+from+"去往"+go)
    }
}
//Aobj里面的this指向window Afn里面的this指向Aobj
console.log(Aobj.age)   //12
console.log(Aobj.Afn())  // 小杨有undefined岁来自undefined去往undefined


//改变this指向
var Bobj = {
    name:'阿B',
    age:18,
    oage:20
}
//通过call
Aobj.Afn.call(Bobj) //阿B有20岁来自undefined去往undefined
//通过apply
Aobj.Afn.apply(Bobj) //阿B有20岁来自undefined去往undefined
//通过bind
Aobj.Afn.bind(Bobj) //返回的是Afn方法的副本
Aobj.Afn.bind(Bobj)()  //阿B有20岁来自undefined去往undefined
//由上所知 bind返回的是一个改变了this的新方法,要加()才执行

//传参
Aobj.Afn.call(Bobj,'长沙','西南') //阿B有20岁来自长沙去往西南
Aobj.Afn.apply(Bobj,['北京','西藏']) //阿B有20岁来自北京去往西藏
Aobj.Afn.bind(Bobj,'南城','东北')()  //阿B有20岁来自南城去往东北

//三个方法第一个参数都是改变this的指向,第二个参数有所差别.
//call 传字符串 apply传的是数组 bind也是字符串

//用bind把数组[a,b,c]改为函数所需要的(a,b,c)
//例如Math.max 可以实现得到数组中最大的一项
var arr1 = [8,4,3,2,9];
var max = Math.max.apply(null,arr1);

var arr1 = [8,4,3,2,9];
var min= Math.min.apply(null,arr1);

vararr1=new Array("1","2","3"); 
 vararr2=new Array("4","5","6"); 
Array.prototype.push.apply(arr1,arr2); 
//由上可知道 任何需要(1,2,3)的参数 都可以通过apply把数组转为(1,2,3)
上一篇下一篇

猜你喜欢

热点阅读