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

先看个例子:

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. Go Web(一)

    Beego环境搭建和bee工具安装使:http://blog.csdn.net/qq_534019165/article/details/48288133 Go语言beego框架环境搭建:http:/ ...

  2. 关于indexOf的使用

    今天项目中出现一个bug,在筛选数据的时候出现了冗余数据,查找发现在indexOf方法判断的时候找到了问题的所在. package demo; public class test { public s ...

  3. Windows10搭建FTP服务器

    配置FTP服务器步骤: 第一步: 打开控制面板--->选择程序--->启动或关闭Windows功能--->勾选FTP服务器等.如下图: 第二步: 右键此电脑--->点击管理-- ...

  4. POJ2115 C Looooops ——模线性方程(扩展gcd)

    题目链接:http://poj.org/problem?id=2115 C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  5. Eclipse jar打包详解

    通过Eclipse下的演示工程,介绍如何打包这样的项目:要导出的类里边用到了别的jar包. 方法/步骤     1. Eclipse下的演示工程结构如下图所示,其中Task.java是当前工程运行的M ...

  6. 转:Windows下WSH/JS实现SVN服务器钩子脚本阻止提交空日志信息和垃圾文件

    http://blog.csdn.net/caikanxp/article/details/8279921 如何强制用户在提交SVN时填写日志信息? 如果用户使用的都是TortoiseSVN客户端,可 ...

  7. elasticsearch 中文分词(elasticsearch-analysis-ik)安装

    elasticsearch 中文分词(elasticsearch-analysis-ik)安装 下载最新的发布版本 https://github.com/medcl/elasticsearch-ana ...

  8. Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

    从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户 ...

  9. 采用Psyco实现python执行速度提高到与编译语言一样的水平

    本文实例讲述了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,分享给大家供大家参考.具体实现方法如下: 一.安装Psyco很简单,它有两种安装方式,一种是源码方式,一种是二进制 ...

  10. Ubuntu16.04 安装cuda9.0 cudnn 7.0.5

    参考网址:https://blog.csdn.net/zhuangwu116/article/details/81063234 (1)下载安装文件: 下载cuda9.0 runfile 文件 下载地址 ...