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