3

JavaScriptモジュールのパターンについて読んでいました。私の質問は、それを使ってサブモジュールを作成する方法です。つまり、このクラスがあると言って、それを継承するにはどうすればよいですか。

    var MODULE = (function () { 
    my = function(){
            this.params = ""
         }, 
    privateVariable = 1; 

    my.prototype.moduleMethod = function () {
        console.log("mod");
    }; 

    return my; 
}());

親から継承されたプロパティを使用して子クラスを作成するにはどうすればよいですか?モジュールパターンで同じことをするにはどうすればよいですか?

4

2 に答える 2

7

モジュールパターンはクラスパターンではありません。JavaScriptでクラスを持っているふりをすることはできません。継承に関しては、本当に継承する必要がある場合は、コンストラクター関数を使用してオブジェクトを作成し、プロトタイプの継承を使用する必要がありますが、実行に時間がかかる場合があります。

サブモジュールの作成は簡単です

MODULE.submodule = (function(){
    // another module stuff that can even reference MODULE
    return { submodule: 'property' }
})();

さて、古典的な意味でのサブクラス化に関しては、ダグラス・クロックフォードがhttp://www.crockford.com/javascript/inheritance.htmlを行うように、プロトタイプを使用してオブジェクトでそれをシミュレートできます。

モジュールを使用してシミュレーションするには、元のモジュール内にシール/シール解除関数を作成して、サブモジュールで使用してみてください。http://www.pallavlaskar.com/javascript-module-pattern-in-details/ で確認できます。

クローン作成と継承

var MODULE_TWO = (function (old) {
    var my = {},
        key;

    for (key in old) {
        if (old.hasOwnProperty(key)) {
            my[key] = old[key];
        }
    }

    var super_moduleMethod = old.moduleMethod;
    my.moduleMethod = function () {
        // override method on the clone, access to super through super_moduleMethod
    };

    return my;
}(MODULE))

または

クロスファイルプライベートステート

var MODULE = (function (my) {
    var _private = my._private = my._private || {},
        _seal = my._seal = my._seal || function () {
            delete my._private;
            delete my._seal;
            delete my._unseal;
        },
        _unseal = my._unseal = my._unseal || function () {
            my._private = _private;
            my._seal = _seal;
            my._unseal = _unseal;
        };

    // permanent access to _private, _seal, and _unseal

    return my;
}(MODULE || {}));
于 2011-09-22T02:43:56.293 に答える
1
>     var MODULE = (function () { 
>     my = function(){

myがvarで宣言されていない場合、関数の実行時にグローバルになります。また、慣例により、コンストラクターの名前は大文字で始まります。したがって、次のようになります。

      var My = function(){

ただし、関数を宣言してそれで済ませることもできます。

      function My() {

>             this.params = ""
>          }, 
>     privateVariable = 1; 
> 
>     my.prototype.moduleMethod = function () {
>         console.log("mod");
>     }; 

プロトタイプの継承を実装しているだけの場合、なぜモジュールパターンを使用するのですか?

> 
>     return my;  }());

モジュールパターンは、継承を目的としたものではなく、機能の「モジュール」を作成し、パブリック、特権、およびプライベートのメンバーをある程度エミュレートすることを目的としています。

于 2011-09-22T02:47:45.927 に答える