0

node プロジェクトで now.js と Mongoose を使用していますが、mongoose 関数内の this.now オブジェクトにアクセスできません。例えば

everyone.now.joinDoc = function (project_id){  
  this.now.talk(); //this will work
  Project.findOne({'_id':project_id}, function(err, project){
    if(project){
      this.now.talk(); // this will not work "TypeError: Cannot call method 'bark' of undefined"
    };
  });
};
4

2 に答える 2

4

コードを次のように変更します。

everyone.now.joinDoc = function (project_id){  
  this.now.talk();  // this will work
  var that = this;  // save 'this' to something else so it will be available when 'this' has been changed
  Project.findOne({'_id':project_id}, function(err, project){
    if(project){
      that.now.talk();  // use local variable 'that' which hasn't been changed
    };
  });
};

内部関数内でthisは、おそらく別のものに設定されています。したがって、アクセスする値を保持するには、内部関数で使用できる別のローカル変数に割り当てます。

于 2011-07-23T16:00:34.247 に答える
1
everyone.now.joinDoc = function (project_id){  
  this.now.talk();  // this will work
  Project.findOne({'_id':project_id}, (function(tunnel, err, project){
    if(project){
      this.now.talk(); 
    };
  }).bind(this, "tunnel")); // overwrite `this` in callback to refer to correct `this`
};

Function.prototype.bindの値を必要な値に設定するために使用しthisます

于 2011-07-23T16:11:18.737 に答える