2017-06-30 8 views
-1

typescript/javascriptの継承に関するいくつかの質問があります。Typescriptの継承

Only public and protected methods of the base class are accessible via the super keyword

I:

import BaseCtrl from './base'; 
import Card from '../models/card'; 

export default class CardCtrl extends BaseCtrl { 
    model = Card; 

    getAll = (req, res) => { 
    super.getAll(req, res); 
    } 

} 

このコードは私にエラーを与える:そのベースを実装

abstract class BaseCtrl { 
    abstract model; 

    // Get all 
    getAll = (req, res) => { 
    this.model.find({}, (err, docs) => { 
     if (err) { return console.error(err); } 
     res.json(docs); 
    }); 
    }; 
export default BaseCtrl; 

し、次のクラス:私は、次の基本クラス(コントローラルーターを表現する)を持っていますスーパーメソッドを呼び出す方法を知りたいです。誰でも助けてくれますか?

+0

のようにスコープをバインドする必要があるかもしれません、なぜこれがdownvotedでしたか? – dopatraman

答えて

0

Working DEMO

しかし:その後、あなたはそれを上書きすることができ

abstract class BaseCtrl { 
    abstract model; 

    // Get all 
    getAll(req, res) { 
     this.model.find({}, (err, docs) => { 
      if (err) { return console.error(err); } 
      res.json(docs); 
     }); 
    } 
}; 
export default BaseCtrl; 

通常のメンバーメソッドとして定義する必要があります

Typescriptの上書き機能は、メンバーメソッドでは正しく機能し、プロパティでは正しく機能しません。

abstract class BaseCtrl { 
    abstract model;  
    // Get all 
    getAll (req, res) { 
     this.model.find({}, (err, docs) => { 
      if (err) { return console.error(err); } 
      res.json(docs); 
     }); 
    }; 
} 

export class CardCtrl extends BaseCtrl { 
    getAll (req, res) { 
    super.getAll(req, res); 
    } 

} 

Propably、あなたがルータに渡す際の基準としてgetAllを使用する必要があり、あなたはこのcardCtrl.getAll.bind(cardCtrl);

+0

こんにちはMouneer。このコードを使って、 "this"が基本クラスで未定義であるという問題に直面したことがありますか?私はこのエラーが発生していると私はなぜわからない! –

+0

あなたは範囲をbingする必要があります。私の答えをチェックしてください – Mouneer

+0

私の編集をチェックしてください。これを 'cardCtrl.getAll'として使用する代わりに、スコープをバインドします。とった? – Mouneer

2

あなたは適切な方法としてgetAllを定義する必要があります:あなたはメンバープロパティとしてgetAllを定義している

import BaseCtrl from './base'; 
import Card from '../models/card'; 

export default class CardCtrl extends BaseCtrl { 
    model = Card; 

    getAll(req, res) { 
     super.getAll(req, res); 
    } 
} 
+0

こんにちはマティアス!お返事ありがとう!このコードがroutes.routeでどのように動作するのか知っていますか? router.route( '/ cards')。get(passport.authenticate( 'login'、{session:false})、cardCtrl.getAll); getAllは関数を持つプロパティではないため、あなたが言ったように変換すると、このコードは壊れてしまいます。 –

関連する問題