js中call和apply和bind的用法

232 阅读1分钟

1. call方法和apply方法改变this指向的使用

改变当前使用该方法的对象中的this指向,call和apply的差别在第二个参数上,
call()第二个参数传入是一一列举出来,apply()的第二参数传入是一个数组。

var obj1 = {
    name: "孙悟空",
    swk : function () {
        console.log(this.name);      
    }
}

var obj2 = {
    name: "猪八戒",
    zbj : function () {
        console.log(this.name);      
    }
}
obj1.swk();   // 孙悟空
obj2.zbj();  // 猪八戒

obj1.swk.call(obj2);   // 猪八戒    (call方法)
obj1.swk.apply(obj2);   // 猪八戒   (apply方法)

2. bind方法对于改变this指向的使用

bind()这个方法会创建一个函数的实例,这个实例的this值会被绑定到传递给bind()函数的值。
function a(y){
    return this.x+y;
};
var o={x:1};
var g=a.bind(o);
g(2);    //3
从例子中可以看出函数a绑定到对象o上了,并且返回了新的函数g,
调用g时,a函数会当作对象o的方法来调用。bind()这个方法是将函数绑定到某个对象上,
并且返回一个新的函数,这个新函数中传入的参数都将传入被绑定的函数上。