1.关于this对象的指向,请看如下代码

var name = 'jack';
var age = 18;
var obj = {
name:'mary',
objAge:this.age,
myFun:function(){
console.log(this.name,this.objAge,this.age)//当前this对象指向obj故this.age是undefined
}
}
输出

var windowName = 'myWindow';
var obj2 = {
name:'tom',
age:22,
}
var show = function(){
console.log(this.obj2.name,this.obj2.age,this.windowname)//当前this对象指向window对象
}

输出

2.那如何改变方法调用时的this指向呢,其实call()、apply()、bind() 就是用来重定义 this 这个对象的!请看代码

var name = '老王',age=30;
var obj = {
name:'小张',
objAge:this.age,
myFun:function(){
console.log(this.name,this.age);
}
}
var otherObj = {
name:'张三',
age:33
}

输出

 

myFun的this对象指向的是otherObj.不同的是bind返回的是一个函数需要手动执行

3.call 、bind 、 apply 如何进行传参呢又有什么区别呢

var name = '老王',age=30;
var obj = {
name:'小张',
objAge:this.age,
myFun:function(param1,param2){
console.log(this.name,this.age,param1,param2);
}
}
var otherObj = {
name:'张三',
age:33
}

输出

call的参数用逗号隔开可以传任意多个参数,apply的参数是一个数组,bind的参数也是用逗号隔开

当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

4.call 、bind 、 apply 常用形式

  

//例如求最大最小值,this对象用不到故可以传任意对象
Math.max.apply(undefined,[1,2,3,4])
Math.max.call(undefined,1,2,3,4,5)
Math.max.bind(undefined,1,3,5,7,9)()

JS中call,apply,bind的区别的更多相关文章

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

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

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

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

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

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

  4. JS 的 call apply bind 方法

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

  5. javascript中call,apply,bind的用法对比分析

    这篇文章主要给大家对比分析了javascript中call,apply,bind三个函数的用法,非常的详细,这里推荐给小伙伴们.   关于call,apply,bind这三个函数的用法,是学习java ...

  6. JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

    JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...

  7. (网页)Angular.js 中 copy 赋值与 = 赋值 区别

    转自st.gg Angular.js 中 copy 赋值与 = 赋值 区别 为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.use ...

  8. js中的substr和substring区别

    js中的substr和substring区别 Substring: 该方法可以有一个参数也可以有两个参数. (1)  一个参数: 示例: var str=“Olive”: str.substring( ...

  9. JS 中的require 和 import 区别整理

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

随机推荐

  1. mfc HackerTools释放资源

    作用: 在VC环境中除了我们所常用的Dialog.Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多. ...

  2. 【IDE】Sublime Text 3 使用配置

    1 安装 首先现在安装Sublime Text 3,直接官网下载(http://www.sublimetext.com/3),也可以在其他地方下载,安装完成后进行破解 菜单栏Help - Enter ...

  3. mzy,struts学习(一)

    大家都在讲struts已经过时了,现在都是前后台分离,没有必要去学一个淘汰的框架,但是怎么讲呢?我觉得,struts能够流行那么多年,肯定有它的原因,肯定有很多优秀和好的地方,有一个指导过我的人给我讲 ...

  4. JavaWeb之文件上传、下载

    时间:2016-12-17 18:07 --文件上传概述上传不能使用BaseServlet1.文件上传的作用    例如网络硬盘,就是用来上传和下载文件的.2.文件上传对表单的限制    1)必须使用 ...

  5. mysql最强

    MYSQL 与mysql第一次亲密接触 数据库相关概念 一.数据库的好处 二.数据库的常见概念 ★ 三.数据库存储数据的特点 四.常见的数据库管理系统 MYSQL的介绍 一.MySQL的背景 二.My ...

  6. MySQL高可用主从复制部署

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 基础环境 二 实际部署 2.1 安装MySQL 2.2 初始化MySQL 2. ...

  7. Git工具的使用教程二

    1.3时光穿梭机--版本回退 版本回退分为两步骤进行操作: 步骤: 1.查看版本,确定需要回到的时候点     指令:             git log             git log ...

  8. golang redis

    安装 下载第三方包: go get -u github.com/go-redis/redis/v9 连接 // 定义一个rdis客户端 var redisdb *redis.Client // 初始化 ...

  9. Python之struct模块

    面对网络协议,在组包拆包时,python提供了struct模块,它可以帮助我们在python值和C语言的结构体之间相互转换,下面一起来了解struct的具体用法. 假设,我们的网络协议为消息id(un ...

  10. 第17章-x86-64寄存器

    不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Architecture),也可以称为指令集(instruction set).Intel将x86系列CP ...