码迷,mamicode.com
首页 > 移动开发 > 详细

JavaScript中的call,apply,bind的使用

时间:2018-04-19 16:59:50      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:call、apply、bind

一、call

call(thisObj,arg1,arg2,arg...)
定义:调用一个对象的方法,以另一个对象替换当前对象。
说明:call方法可以用来代替另一个对象调用一个方法。
call方法可以将一个函数对象的上下文改变为由thisObj指定的新对象。
thisObj的取值有以下几种情况:
(1)不传,或者为null,undefined时,函数中的this指向window对象;
(2)传递另一个函数的函数名,函数中的this指向这个函数的引用;
(3)传递基础类型数据时,函数中的this指向其对应的包装对象;
(4)传递一个对象时,函数中的this指向这个对象。

技术分享图片

例1--> 调用Math的max方法实现对一串数字的排序:
技术分享图片

例2--> 调用fn1的方法打印fn2中的信息
技术分享图片

例3--> 实现继承:
技术分享图片
Fn1.call(this)的意思是使用Fn1对象替代this对象,则fn2就可以调用Fn1的所有属性和方法。

二、apply

语法:apply(thisObj,argArray)
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。

如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

功能同call,传参方式不一样。举例参考call,此处略。

三、bind

bind方法创建一个新的函数,MDN上这样介绍:
bind()方法创建一个新的函数(称为绑定函数),当函数被调用时,其this关键字被设置为提供的值,在调用新函数时,提供一个给定的参数序列。
function.bind(thisObj,arg1,arg2,arg3):参数thisObj表示:当绑定的函数被调用时,this的指向为该参数。当使用new操作符调用绑定函数时,参数thisObj无效。参数arg1,arg2,...表示:当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。

this.name="jack"
var demo={
name:"lily",
getName:function(){return this.name}
}

var name1= demo.getName;
console.log(name1())

var name2 = name1.bind(demo)
console.log(name2())

结果:
jack
lily
console.log(name1()) //输出jack,这里的this指向全局对象
console.log(name2()) // 输出lily, 这里的this指向name对象

给函数预设初始值:
var add = function(x,y){return x+y}
var add_curr = add.bind(null,2)
add_curr(3)
结果: 5

JavaScript中的call,apply,bind的使用

标签:call、apply、bind

原文地址:http://blog.51cto.com/2014fontend/2105425

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!