Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简化JavaScript模式_Javascript_Design Patterns - Fatal编程技术网

简化JavaScript模式

简化JavaScript模式,javascript,design-patterns,Javascript,Design Patterns,根据我在上一篇文章中得到的答案,我想知道如何简化下面的JavaScript模式 通过简化,我的意思是通过不重复Module.*方法来保持干燥 前 我认为应该是这样的: Moduje.js var Module = (function(Module) { init = function() { console.log("init"); }; return Module; })(Module || {}); var Module = (function(Module) {

根据我在上一篇文章中得到的答案,我想知道如何简化下面的JavaScript模式

通过简化,我的意思是通过不重复Module.*方法来保持干燥

我认为应该是这样的:

Moduje.js

var Module = (function(Module) {
  init = function() {
    console.log("init");
  };
  return Module;
})(Module || {});
var Module = (function(Module) {
  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 || {});
var Module = Module || {};
Module.Users = (function(Users) {
  Users.init = function() {
    console.log("Module.Users.init");
  };
  return Users;
})(Module.Users || {});
这是原始代码

Moduje.js

var Module = (function(Module) {
  init = function() {
    console.log("init");
  };
  return Module;
})(Module || {});
var Module = (function(Module) {
  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 || {});
var Module = Module || {};
Module.Users = (function(Users) {
  Users.init = function() {
    console.log("Module.Users.init");
  };
  return Users;
})(Module.Users || {});
嗯:

不,那不行。您正在为该函数之外的模块创建默认值。您也忘记了init声明中的var,在本例中,这使它可以工作,但由于它是一个全局变量,如果不是由于可能强制执行的严格模式而导致的错误,它的工作方式是不正确的。由于您是使用该语句声明模块的,所以将模块作为可能的参数传入并没有任何意义

我不知道简化这个词对你意味着什么;我觉得原版还可以

编辑-如果您想做的是消除对基本对象的重复引用,则可以使用扩展函数,从库中或您自己编写的扩展函数:

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;
}

对我来说,简化意味着摆脱重复的Module.method1、Module.method2。