Function.bind(obj,arg0,arg1,arg2,...)

把一个公共方法当作(绑定)某一对象的一个私有方法使用。

参数

obj
目标对象
argn
附带参数

返回值

匿名函数

描述

该方法是从 apply 方法封装而来。把方法(method)绑定到对象(object),那么该对象就可以获得方法method,并能执行它。打个比喻,比如狼能嚎叫(嚎叫是一个method),默认嚎叫的声音为“噢喔~~~”,现在嚎叫方法绑定给狗,狗也能“噢喔~~~”地嚎叫了,如果狗嚎叫时再带一个参数“汪”,那么狗嚎叫时就发出长长的“汪~~~”声音,变了调子的狼。

从实际上看,把方法绑定给对象,执行时就是把对象替换方法中的this,执行一遍方法。其实给对象绑定方法,还有一种做法,如下面示例注释部分的方法二,它与方法一实质上是等效的。方法一中bind的返回值是一个匿名函数,即:$("dog").onclick = function(){howl.apply($("dog"),"汪汪~~~");},而 apply 方法在执行时会把方法(howl)内部 this 的指针指向对象($("dog")),因此对比 howl 与 howl2 两个函数,不同的是把this改为传入的参数obj。

示例

<input type="button" id="dog" value="旺财" />
<script type="text/javascript" >
function howl(words){
     alert(this.voice = words || "噢喔~~~");    
}
$("dog").onclick = howl.bind($("dog"),"汪汪~~~"); //方法一
//方法二: $("dog").onclick = function(){howl2(this,"汪汪~~~")}; function howl2(obj,words){alert(obj.voice=words||"噢喔~~~")}
</script>
//点击“旺财”,“汪汪~~~”