一、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
原文地址:http://blog.51cto.com/2014fontend/2105425