web-dev-qa-db-ja.com

ゲッターを介してネストされたクラス(名前空間をエミュレートするため)

したがって、ES6で導入された構文は、以前行っていたものよりも間違いなく間違いないことは誰でも知っています。そうは言っても、私たちはまだ名前空間を持っていません(それはニースでしょう...)

私が解決しようとしている問題は、古いコードをes6に変換することです。この古いコードは次のようなことをしていました:

window.foo = {
    init: function() {

    },
    otherFoo: {
        init: function() {

        }
    }
}

「モジュール」を別々のファイルに入れて、ウィンドウに存在していたグローバルな「foo」に追加することができました。

代わりに、個別のモジュールを作成し、それらをメインのJSファイルにインポートし、次のようにクラスをfoo内にネストします。

import OtherFoo from './otherfoo';

class Foo {
    static init() {

    }
    static get OtherFoo() { 
        return OtherFoo;
    }
}

それは機能するので、どうやって機能させることができるかという問題ではありません。それは、私がそうであるかどうかの問題ですすべき? JavaScriptコミュニティの私たちは、できるからといって行動する傾向がありますが、私はそのような行を避けたいのです。

6
ndugger

私は正当な理由を知りませんnot組織が手助けするならそれをするべきです。私は、クラスと静的ゲッターを、人気のあるJSライブラリですでに頻繁に使用されているパターンを公開できる内部実装の詳細と見なしています。多くのライブラリは、型付きの単一のオブジェクトハッシュを既に公開しているため、これはそれほど大きな違いはありません。

私はそれとの間に違いはないと私は言います:

// foo.js
module.exports = {
   OtherFoo: require('./otherFoo.js')
   OtherFoo2: require('./otherFoo2.js')
}

クラスを使用するes6のこの架空のバージョンのmongooseを考えてみます。

// mongoose/index.js
export default class Mongoose {
    constructor() {
    }

    static get model() { return require('./model.js'); }
}

//mongoose/model.js
export default class Model {
}

そしてそれは本物のマングースと同じように使うことができます:

var mongoose = require('mongoose');

new mongoose.model(...);
4
Luggage