Упростить шаблон JavaScript - PullRequest
0 голосов
/ 19 октября 2011

Основываясь на ответе, который я получил в своем предыдущем вопросе , я хотел бы знать, как упростить следующий шаблон JavaScript.

Упрощая, я имею в виду сохранить егоСУХОЙ, не повторяя Module.*method.

ex.

Module.one = function() {
  //one
};
Module.two = function() {
 //two
};

Вот как я считаю, это должно выглядеть так:

Moduje.js

var Module = (function(Module) {
  init = function() {
    console.log("init");
  };
  return Module;
})(Module || {});

Module.Users.js

var Module = Module || {};
Module.Users = (function(Users) {
   init = function() {
    console.log("Module.Users.init");
  };    
  return Module.Users;
})(Module.Users || {});

Вот оригинальный код.

Moduje.js

var Module = (function(Module) {
  Module.init = function() {
    console.log("init");
  };
  return Module;
})(Module || {});

Module.Users.js

var Module = Module || {};
Module.Users = (function(Users) {
  Users.init = function() {
    console.log("Module.Users.init");
  };
  return Users;
})(Module.Users || {});

1 Ответ

0 голосов
/ 19 октября 2011

Хорошо:

var Module = (function(Module) {
  init = function() {
    console.log("init");
  };
  return Module;
})(Module || {});

Нет, это не сработает. Вы создаете значение по умолчанию для «Модуля» вне этой функции. Вы также забыли var в объявлении «init», что в этом случае вроде как заставляет его работать, но с ошибками (потому что это глобальная переменная, если не ошибка из-за «строгого» режима, возможно, исполняется). Поскольку вы объявляете «Модуль» с этим оператором, передача «Модуль» в качестве (возможного) аргумента не имеет никакого смысла.

Я не знаю, что для вас значит слово "упрощение"; оригинал выглядит нормально для меня.

изменить & mdash; если вам нужно избавиться от повторяющихся ссылок на базовый объект, вы можете использовать функцию "extension" из библиотеки или из того, что вы пишете сами:

function extend(target) {
  var sources = Array.prototype.slice.call(arguments, 1), source;
  for (var i = 0; i < sources.length; ++i) {
    source = sources[i];
    for (var key in source) {
      if (source.hasOwnProperty(key))
        target[key] = source[key];
    }
  }
  return target;
}

Тогда вы можете сделать что-то вроде этого:

var Module = createModule(); // make an object however you want

Module = extend(Module, {
  newProperty_1: "hello world",
  newProperty_2: function() {
    // this will become a method on "Module"
  },
  newProperty_3: {
    subObjectProperty: "whatever"
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...