Как сделать подмодуль через шаблон модуля - PullRequest
3 голосов
/ 22 сентября 2011

Я читал о шаблоне модуля JavaScript.Мой вопрос состоит в том, как мне создать подмодули с ним, то есть, как я могу наследовать от него, скажем, у меня есть этот класс

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

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

    return my; 
}());

Как мне сделать его дочерним классом со свойствами, унаследованными от родителя?Как я могу сделать то же самое с шаблоном модуля?

Ответы [ 2 ]

7 голосов
/ 22 сентября 2011

Шаблон модуля не является шаблоном класса.Вы не можете просто притворяться, что у вас теперь есть классы в 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 || {}));
1 голос
/ 22 сентября 2011
>     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;  }());

Шаблон модуля предназначен не для наследования, а для создания «модулей» функциональности иэмулировать публичных, привилегированных и частных членов в некоторой степени.

...