Javascript对象函数作为其他对象中的参数

时间:2015-07-22 09:26:09

标签: javascript node.js asynchronous

如何将对象函数作为参数传递给其他对象,如下例所示?

function Page(name) { this.name = name;}
Page.prototype.functionA = function(callback){
    callback(null,'I am A');
}
Page.prototype.functionB = function(callback){
    callback(null,'I am B');
}

function Sitemap() { this.children = [];}
Sitemap.prototype.getPages = function(){
    return this.children;
}
Sitemap.prototype.updateSiteMap = function (Page.functionX, done){
   var pages = this.getPages();
   var update = function(page, cb) {
       page.functionX(function () {
            cb(null);
       });
   };
   async.map(pages, update, function(err, result){
      done(null, result);
   });
};

我想通过条件决定在Object上调用哪个函数

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

嗯...这样的事情?

Sitemap.prototype.updateSiteMap = function (functionName, done){
   var pages = this.getPages();
   var update = function(page, cb) {
       page[functionName](function () {
            cb(null);
       });
   };
   ...
};

// Usage

...updateSiteMap('functionA', done);

答案 1 :(得分:0)

我可以在给定函数的staticClass Page中使用.call()函数运行它:

function Page(name) { this.name = name;}
Page.functionA = function(callback){
     callback(null,'I am A');
}
Page.functionB = function(callback){
     callback(null,'I am B');
}

function Sitemap() { this.children = [];}
Sitemap.prototype.getPages = function(){
   return this.children;
}
Sitemap.prototype.updateSiteMap = function (functionX, done){
   var pages = this.getPages();
   var update = function(page, cb) {
      functionX.call(page, function () {
          cb(null);
      });
   };
   async.map(pages, update, function(err, result){
      done(null, result);
   });
};

谢谢你