众所周知的一件麻烦事是函数外部的this变量都不可见,但是我们在编写使用局部函数的方法时,却又很可能需要在某一时刻从内部函数访问this变量。
这种情况下可以通过在this变量中存储一个需要的信息(例如在内部函数中可见的endOfLine),如果需要访问整个this对象,也可以将它保存到一个变量上,这种变量通常采用名称self(或者that).但是那么多的变量又会使代码看起来很乱。另一个比较好的解决方法是使用类似分布函数的函数,这种方法没有增加函数的参数,而是将this对象作为函数apply方法的第一个参数。通过这种方法,可以将内部函数bind到this上,它将与外部函数拥有同样的this对象。
1 function bind(func,object){ 2 return function(){ 3 return func.apply(object,arguments); 4 }; 5 } 6 7 var x=[]; 8 var pushX=bind(testArray.push,testArray); 9 pushX("A"); 10 pushX("B"); 11 x; 12 //输出["A","B"]
或者是下面更简单的写法
function method(object,name){ return function(){ object[name].apply(object,arguments); }; } var pushX=method(x,"push");