2016-09-11 6 views
0

次のコードを使用してRestifyルートを設定します。疑似クラスを作成し、オブジェクトをインスタンス化し、それをハンドラとして使用します。 "ping"関数でオブジェクト自体が "this"にバインドされているので、メンバ変数にアクセスできます。しかし、 "これ"は、ルートなどを含むオブジェクトを復元するものを指してしまいます。これはRestifyではうまくいかないでしょうか?"this"を使用してRestifyハンドラオブジェクトを取得する

var Handler1 = function() { 
     if (!(this instanceof Handler1)) { 
     return new Handler1(); 
     } 
     ... 
    } 
    HttpHandlers.prototype.ping= function(req, res, next) { 
      //this doesn't point to the handler1 object. 
      return next(); 
    } 
... 
    var myhandler1 = new Handler(); 
    app.get("/ping", myhandler1.ping , handler2); 
    handler1.ping.bind(myhandler1) 

答えて

0

私は、オブジェクトではなくルートとしてオブジェクトインスタンスを与えようとします。それはちょっと私にとって意味があります。

class Pong1 { 
    constructor(name) { 
    this.name = name; 
    } 
    ping = res => res.write(`PONG ${this.name}`); 
} 

const pong1 = new Pong1('Pongy); 
app.get('/ping', pong1.ping); 

これはES2017バージョンによく似ていますが、これが望ましいと思います。本当に必要ならば、より多くのES5構文に変換できるはずです。

+0

「ジェイソンLivesay」@、彼女を投稿するとき、コードを簡素化する私の試みで、私は「.ping」を削除しました。後でコードをクリーンアップするまで、古い構文を使用しなければなりません。だから私はなぜ私が文脈を得ていないのかまだ分かりません。 – user994165

+0

'this'が '.prototype.ping'でバインドされていることを確認しているのであれば、プロトタイプ関数をバインドしていないため、問題が発生した可能性があります。 –

+0

"Jason Livesay"ので、関数宣言に.bind(Pong1)を追加しようとしました。私が "this"を調べると、オブジェクト/疑似クラスが表示されますが、オブジェクトインスタンス変数が含まれているようには見えません。私がしようとしているのは、 "クラス"をインスタンス化し、その関数がコンストラクタで設定されたオブジェクトのメンバ変数にアクセスできるようにする方法です。 – user994165

0

それは私がバインドされた機能に渡すために必要なことが判明:

app.get("/ping", myhandler1.ping.bind(myhandler1), handler2); 
関連する問題