ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

call()、apply()、bind()

2022-02-07 10:35:34  阅读:145  来源: 互联网

标签:obj myFun bind call result apply


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...)

参数:

  • 第一个参数都是this要指向的对象。(添加到哪个环境中)
  • apply第二个参数是个数组。call和bind都是以逗号分隔。

返回值:

  • bind是返回函数,需要调用。apply、call是立即调用 。
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

总结:

  • 都是用来改变函数的this对象的指向的;
  • 第一个参数都是this要指向的对象,也就是想指定的上下文;
  • 都可以利用后续参数传参,apply第二个参数是个数组。call和bind都是以逗号分隔;
  • bind 是返回函数,便于稍后调用;apply 、call 则是立即调用 。

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有