2016-03-23 12 views
0

でパラメータを使用し、実際に私は別の「クラス」で作成された関数を呼び出すしようとしている、と私は使用したいsocket.on (...)であるが、それは動作していない、それははnodejs

を示し続けますthis.functionは関数ではありません。

ここでコードで:socket.on()の文脈において

//calling the function 
    Serveur.prototype.traitementSurConnection = function(socket) { 
var that = this 
    socket.on('connection', function (creator, typeArtifact,idConteneur, typeConteneur) { 

     that.addArtifact('momo', 'img', 1,0); 

    }) 
}; 

//関数

ZoneCollaborative.prototype.addArtifact = function(creator, typeArtifact,idConteneur, typeConteneur) { 

    // calcul d'un nouvel identifiant 

    var id = this.setIdAr(); 

    console.log(' *** ZC : calcul nouveau IdArtifact = '+id); 


    // création de l'artifact 

    var monArtifact = new Artifact(id, creator, typeArtifact, idConteneur, 

      typeConteneur); 

    console.log(' *** ZC : creation artifact'+monArtifact.getId()); 

    // ajout à la liste 

    this.artifacts.push(monArtifact); 


    console.log(' *** ZC : total artifact ='+ this.artifacts.length); 

}; 

答えて

0

thissocket.on()呼び出しを含む関数/オブジェクトにない指し、むしろはon関数を呼び出すsocketです。これは、人々がこの問題に対処する方法を、一般的である:

var self = this; 
socket.on('connection', function (creator, typeArtifact,idConteneur, typeConteneur) { 

    self.addArtifact('momo', 'img', 1,0); 

}) 

これは、JavaScriptコードで共通の課題である、thisキーワードは、それが使われている範囲に非常に依存しているので、あなたは、多くの場合に使用されているこのパターンを見ますthisを新しいスコープに保存します。

これに関連する追加情報があります。What underlies this JavaScript idiom: var self = this?