if(!Function.prototype.softBind){
Function.prototype.softBind = function(obj){
var fn = this;
console.log("this is " + this);
var curried = [].slice.call(arguments, 1);
console.log("curried is " + curried);
var bound = function(){
return fn.apply(
(!this || this === (window || global))? //!this用于严格模式时,默认绑定到undefined,而不是window上
obj: this, //此处如果写死成obj,则是硬绑定,效果同bind方法
curried.concat.apply(curried, arguments)
);
};
bound.prototype = Object.create(fn.prototype);
return bound;
};
}
function foo() {
console.log("name: " + this.name);
}
var obj = {name: "obj"},
obj2 = {name: "obj2"},
obj3 = {name: "obj3"};
var fooOBJ = foo.softBind(obj);
fooOBJ();
obj2.foo = foo.softBind(obj);
obj2.foo();
fooOBJ.call(obj3);
setTimeout(obj2.foo, 10);
浙公网安备 33010602011771号