二分之一

Just Jason's Blog

Function中的扩展方法bind()

js bind 函数 使用闭包保存执行上下文

bind()主要具有两个重要作用:

(1)一般地,方法中的this关键字总是指向调用此方法的对象,这就造成this显得很不稳定,而使用bind()方法能够保证无论什么时候调用此方法,this关键字总是指向你所要的对象.

(2)提供两次添加参数的机会.第一次是在使用bind()方法的时候,第二次是调用bind()方法返回的句

prototypejs框架中的实现方式:

Function.prototype.bind = function() {
    var __method = this;
    var args = Array.prototype.slice.call(arguments);//将arguments转换为数组
    var object=args.shift(); //截取第一个
    return function() {
        return __method.apply(object,
             args.concat(Array.prototype.slice.call(arguments))
    );
    }
}

用法实例:

var name = "window";
var obj = {
    name: 'JSON',
    getName: function() {
        alert(this.name);
    }
};
function runFun(fun) {
    fun();
}
var getName2 = obj.getName.bind(obj);
runFun(obj.getName); //window
runFun(getName2); //JSON

最后修改时间:2014年9月8日星期一晚上8点57