其他分享
首页 > 其他分享> > call()、apply()、bind()

call()、apply()、bind()

作者:互联网

call()、apply()、bind()

var name='HJJ';
var obj = {
    name:"HHH",
    age:18,
    myFun:function(){
        console.log(this)
        console.log(this.name+'年龄'+this.age);
    }
}
obj.myFun(); //HHH年龄18 ===>对象方法调用,this是该对象obj

var result=obj.myFun;          //==>result=myFun,普通函数,this是window
result();//HJJ年龄undefined

result.call(obj);//HHH年龄18  ===>call改变this指向,this是obj....即result添加到obj环境中
result.apply(obj);//HHH年龄18  ===>apply改变this指向,this是obj
result.bind(obj)();//HHH年龄18  ===>bind改变this指向,this是obj

call()、apply()、bind() 方法的共同点和区别:

作用:都是用来改变函数的this对象的指向的。

语法:

call(thisObj,value1,value2...)

apply(thisObj,[value1,value2...])

bind(thisObj,value1,value2...)

参数:

返回值:

var person1 = {
    name:"HHH",
    age:18,

    myFun:function(height,job){
        this.height=height
        console.log(this)
        console.log(this.name+'年龄'+this.age+'身高'+height+'工作'+job);
    }
}
var person2 = {
    name:"LLL",
    age:99
}

person1.myFun.call(person2,168,'actor')//LLL年龄99身高168工作actor。。。即person1.myFun添加到person2环境中
person1.myFun.apply(person2,[168,'actor'])//LLL年龄99身高168工作actor
person1.myFun.bind(person2,[168,'actor'])()//LLL年龄99身高168工作actor

总结:

标签:obj,myFun,bind,call,result,apply
来源: https://www.cnblogs.com/jiajia-hjj/p/15867092.html