面试中经常会被问到的,或者做笔试题的时候也会有这样的问题,所以今天专门对这个问题做个总结;

先看个例子:

var age = '19'
var myObj = {
name:'小赖',
myAge:this.age,
sayName:function(){
console.log(this.name + '今年' + this.age)
}
}
myObj.sayName(); // 小赖今年 undefined var hero = {
name:'艾希',
age:'100'
}
myObj.sayName.call(hero); //艾希今年100
myObj.sayName.apply(hero); //艾希今年100
myObj.sayName.bind(hero)(); //艾希今年100
上面的例子看出 使用call(),apply(),bind()都是用来改变this指向的;
以上除了 bind 方法后面多了个 () 外 ,结果返回都一样! 这样是因为bind()返回的是一个函数,必须调用才能执行。
然后我再稍微改下这个例子;
再往下看:
var myObj1 = {
name:'小王',
myAge:this.age,
sayName:function(add, front){
console.log(this.name + '今年' + this.age + '在'+add+'做'+front)
}
}
var heros ={
name:'艾希尼亚',
age:'20'
}
myObj1.sayName.call(heros,'上海','前端'); //艾希尼亚今年20在上海做前端
myObj1.sayName.apply(heros,['上海','前端']); //艾希尼亚今年20在上海做前端
myObj1.sayName.bind(heros,['上海','前端'])(); // 艾希尼亚今年20在上海,前端做undefined ;这里有错乱
myObj1.sayName.bind(heros,'上海','前端')(); // 艾希尼亚今年20在上海做前端
myObj1.sayName.bind(heros)('上海','前端'); // 艾希尼亚今年20在上海做前端
从上面的例子可以看出call,apply, bind 这三个方法的第一个参数都是this的要指向的对象,

第二个参数就有差别了call的参数是一个一个放进去的中间用 ,参数全都用 ,逗号隔开;

apply的第二个参数都必须放在一个数组里面传进去 数组里面的值和sayName方法中是一一对应的;

bind方法除了返回的是一个函数外 它的第二个参数和call一样。
三者参数不只限定是字符串类型,可以是各种类型 函数,对象等都可以,另外可以看出bind方法的第二个参数还可以在调用的时候再传。

js中 call() ,apply(),bing()方法三者的用法和区别的更多相关文章

  1. JS中call,apply,bind方法的总结

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user: "小马扎", fn: ...

  2. 深入理解js中的apply、call、bind

    概述 js中的apply,call都是为了改变某个函数运行时的上下文环境而存在的,即改变函数内部的this指向. apply() apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作 ...

  3. JS 的 call apply bind 方法

    js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]] ...

  4. node.js中的url.parse方法使用说明

    node.js中的url.parse方法使用说明:https://blog.csdn.net/swimming_in_it_/article/details/77439975 版权声明:本文为博主原创 ...

  5. js中call apply方法的使用介绍

    js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, ...

  6. js 中call,apply,bind的区别

    call.apply.bind方法的共同点与区别: apply.call.bind 三者都是用来改变函数的this对象的指向: apply.call.bind 三者都可以利用后续参数传参: bind ...

  7. JavaScript中call,apply,bind方法的总结。

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...

  8. js中的apply和call API

    借用网上的一个例子: fun.call(this,arg1,arg2,arg3) fun.apply(this,arguments) this.fun(arg1,arg2,arg3) 三种方法等效. ...

  9. JavaScript中call,apply,bind方法的总结

    原文链接:http://www.cnblogs.com/pssp/p/5215621.html why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之 ...

随机推荐

  1. live555 RTSP推送到Darwin出现404错误的解决

    我们将Darwin部署到公网,接收live555 RTSP/RTP推送的时候,经常会出现在SETUP步骤Darwin返回404错误,经过查找原因,主要是Darwin对live555推送的sdp信息中的 ...

  2. EasyDarwin做转发延时太大?

    很多人反映,在用EasyDarwin做流媒体转发服务时,延时太大,实际Darwin在转发模块中,有一个控制转发Buffer时间的配置reflector_buffer_size_sec,我们将这个配置改 ...

  3. java web项目初始化启动一个java方法

    项目中需要一些初始化数据,或者加载中断的任务. 首先在web.xml中配置信息,配置在<web-app>中: <servlet> <servlet-name>Ini ...

  4. 基于 phantomjs 的自动化测试---(1)

    它主要靠js脚本来模拟操作一般流程是写代码写代码写代码open 某个 url监听 onload 事件事件完成后调用 sendEvent 之类的 api 去点击某个 DOM 元素所在 point触发交互 ...

  5. SQL 系统表应用

    查看link server select DD.System,DD.DB,DD.previous_processing_dte, DD.processing_dte,LS.LinkServerName ...

  6. PAT 天梯赛 L1-049. 天梯赛座位分配 【循环】

    题目链接 https://www.patest.cn/contests/gplt/L1-049 思路 用一个二维数组来保存一个学校每个队员的座位号 然后需要判断一下 目前的座位号 与该学校当前状态下最 ...

  7. Nginx配置故障转移

    当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用. 如果上游服务器的某一台宕机了,直接轮训到下一个~ 8080 8081 8082 关 ...

  8. 使用eclipse的SVN连接码云

    码云配置: 码云的项目上,启用SVN访问 eclipse的配置,不配置这个会报错

  9. Kotlin静态方法

    Kotlin静态方法 工具类 全都是静态方法的情况 : class 类名 改为 object 类名 即可 package redwolf.com.moreimageupload import okht ...

  10. ubuntu nginx 安装 certbot(letsencrypt)

    https://certbot.eff.org 到上面网站按照步骤安装certbot, 安装完成后,certbot 生成证书有两种方式 第一种:standalone模式,certbot 会启动自带的n ...