清理Javascript / Nodejs代码

我是新来的JavaScript / nodejs,我正在努力清理它的一些代码。

我正在使用asynchronous nodejs库来处理使代码的asynchronous部分更容易。

现在代码看起来像这样:

Object.prototype.method = function(){ var self = this; // bunch of code async.forEach(self.someArr, function(someObj, callback){ self.somefunc(someObj.someProp, function(err, aNewObj) { if (err) { return callback(err); } self.someOtherArr.push(aNewObj.someOtherProp); callback(); }); }, callback); } 

不过,我想用另一个在对象原型上定义的命名函数replace匿名函数。 由于代码结构的方式,我不知道如何创build一个新的函数传递到async.forEach同时保持适当的self价值。

我想要它看起来像:

 AnObject.prototype.method = function(){ var self = this; // bunch of code async.forEach(self.someArr, self._newMethod, callback); } AnObject.prototype._newMethod = function(someObj, callback){ var self = this; self.somefunc(someObj.someProp, function(err, aNewObj) { if (err) { return callback(err); } self.someOtherArr.push(aNewObj.someOtherProp); callback(); }); } 

但是,由于上下文的变化,这显然不起作用。

除非这个函数是在自我存在的同一个闭包中定义的,否则你需要使用一些东西来代理它:

 async.forEach(self.someArr, function(someObj, callback){ self.somefunc(someObj.someProp, function(err, aNewObj) { self.otherfunc(err, aNewObj, callback); }); }, callback); 

如果你改变一下你的风格,你可以很容易地做到这一点。

 AnObject = function() { var self = this; self.method = function(){ // bunch of code async.forEach(self.someArr, self._newMethod, callback); }; self._newMethod = function(someObj, callback){ self.somefunc(someObj.someProp, function(err, aNewObj) { if (err) { return callback(err); } self.someOtherArr.push(aNewObj.someOtherProp); callback(); }); }; };