2013-02-08 77 views
1

我是javascript/nodejs的新手,我正在尝试清理它的代码。清理Javascript/Nodejs代码

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

现在的代码如下所示:

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); 
} 

但是,我想和另一个名为功能上对象的原型也被定义来代替匿名函数。由于代码的结构化方式,我不知道如何创建一个新函数来传入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(); 
    }); 
} 

但是,这显然并不因为上下文变化的工作。

+0

如果命名的函数在内部也使用变量'self',它应该没有区别。唯一可能有趣的是如果它使用'this'。 – 2013-02-09 00:07:45

+0

我更新了我的问题,使其更加清晰。命名的函数也使用self。 – 2013-02-09 00:58:09

回答

2

除非该功能是在自我存在相同的封闭定义,你需要使用一些代理到它:

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

这与关闭与js开始。 – 2013-02-10 18:47:15

1

你可以做这个工作,如果你改变你的风格有点不够轻松。

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(); 
     }); 
    }; 
};