拡張バージョンsqlite3.Database
を作成しようとしていますが、できるだけシンプルで読みやすいようにES6の方法でやりたいと思います。請負業者の基本クラス(sqlite3.Database)を拡張する方法は? node6s、ES6
var sqlite3 = require('sqlite3');
class DBExtend extends sqlite3.Database {
constructor(file) {
super(file);
this.foo = function() {
return 4;
}
}
test() {
return 4;
}
}
var t = new DBExtend("test.db"); //creates an object of DataBase
console.log(t.foo()); // OK
console.log(t.test()); // TypeError: t.test is not a function
明らかなように、上記の構文は、子クラスにメソッドを追加することができない:私の解決策である 。 私の質問は
- なぜ動作しないのですか?
- コンストラクタにメソッドを追加し、の呼び出しの後にthis.foo = function() {}
の構文を使用するとどうなりますか?
'sqlite3.Database'は何ですか?それはクラスまたはコンストラクタ関数ですか? –
@ KrzysztofSafjanowskiので、コンストラクタスタイルのクラスを拡張する正しい方法は何ですか? –
コード自体は私にとってはうまく感じられます。私は 'sqlite3.Database'コードを見て、実際のデータベースのインスタンス化のためにCモジュールを使います。使用方法は、拡張できるかどうかに影響を与える可能性があります。私が言っていることの例として、 'class X {constructor(){return new Z(); }};クラスYはX {foo(){return 42; }} '。私は 'var y = new Y();を実行することは決してできません。 'X'は' X'または 'Y'インスタンスではなく新しい' Z'インスタンスを返します。 –