阮一峰老师的ES6 文章里关于把多参函数改写为Thunk函数的说明
任何函数,只要参数有回调函数,就能写成 Thunk 函数的形式。下面是一个简单的 Thunk 函数转换器。
// 正常版本的readFile(多参数版本)
fs.readFile(fileName, callback);
//Thunk 函数转换器。
// ES5版本
var Thunk = function(fn){
return function (){
var args = Array.prototype.slice.call(arguments);
return function (callback){
args.push(callback);
return fn.apply(this, args);
}
};
};
// ES6版本
const Thunk = function(fn) {
return function (...args) {
return function (callback) {
return fn.call(this, ...args, callback);
}
};
};
//使用上面的转换器,生成fs.readFile的 Thunk 函数。
var readFileThunk = Thunk(fs.readFile);
readFileThunk(fileA)(callback);
Thunk函数里面的this 有问题吧?
正常版本里的this 是 fs, Thunk里面的this是window。
我的分析对吗??如果对,那么怎么修正该Thunk 函数呢?
//我的测试用例
var a = 456;
var obj ={
a : 123,
fn: function(b,c){
console.log(this.a)
}
}
obj.fn() // 123
Thunk(obj.fn)()() //456 (全局的a ,肯定不对呀)
不说废话上代码
或者这样