手动实现bind函数
- bind返回 的函数如果作为构造函数搭配new关键字出现的话,绑定的this就会‘被忽略’.为了实现这样的规则,开发者需要考虑如何区分这两种调用方式。具体来说就是,要在bound函数中进行this instanceof判断。
- 另一个细节是:函数具有length属性,用来表示形参个数。在下面的实现中,形参的个数显然会失真。所以,改进的实现方式 需要对length属性进行还原。可是难点在于,函数的length属性值是不可重写的。
Function.prototype.bind = Function.prototype.bind || function(context){
var me = this;
var args = Array.prototype.slice.call(arguments,1);
return function bound(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return me.apply(context,finalArgs);
}
}