Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 - Fatal编程技术网

具有名称空间的JavaScript对象中的本地函数

具有名称空间的JavaScript对象中的本地函数,javascript,Javascript,我想创建一个名称空间来组织我所有的JavaScript。我看不到一种方法,使用下面的代码示例来创建一个本地函数,这样它就只能从这个对象中调用 window.JD = window.JD || {}; JD.Guid = { newGuid : function() { return JD.Guid.s4(); // Would like this to be this.s4(); }, s4 : function() { return

我想创建一个名称空间来组织我所有的JavaScript。我看不到一种方法,使用下面的代码示例来创建一个本地函数,这样它就只能从这个对象中调用

window.JD = window.JD || {};

JD.Guid = {

    newGuid : function() {
        return JD.Guid.s4(); // Would like this to be this.s4();
    },

    s4 : function() {
        return Math.floor((1 + Math.random()) * 0x10000);
    }
}
我尝试过使用
JD.Guid=function(){…}
,但也不起作用。控制台告诉我函数未定义


我希望能够从我的站点中的任何位置调用
JD.Guid.newGuid()

我不确定是否在跟踪。但您可以通过在函数中创建一个将代码包装的上下文来创建在全局命名空间中不可访问的本地函数:

(function() {
  window.JD = window.JD || {};

  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000);
  }

  JD.Guid = {
    newGuid: function() {
      return s4();
    }
  }
})();

我通常会这样做:

var JD = (function(GLOBAL_JD){
      if(GLOBAL_JD === undefined) {
        var jd = {
          GUID: {
            newGuid: newGuid          
          }
        };

        return jd;
      }

  function newGuid() {
    return s4(); // Would like this to be this.s4();
  }

  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000);
  }
})(JD);

console.log(JD.GUID.newGuid());

我想您是在询问
模块
设计模式,在这种情况下,您的代码必须如下所示:

window.JD = window.JD || {};
JD.Guid = (function () {
    // This function is private,
    // you can re-use it only from public accessible method.
    var privateMethod = function() {
        return 'private';
    };
    return {
        newGuid : function() {
            return JD.Guid.s4();
        },
        newGuidThroughtThis : function() {
            return this.s4();
        },
        privateMethod: function() {
            return privateMethod();
        },
        s4 : function() {
            return Math.floor((1 + Math.random()) * 0x10000);
        }
    }
})();
现在,您可以重新使用模块并执行以下操作:

console.log(JD.Guid.s4());
console.log(JD.Guid.newGuid());
console.log(JD.Guid.newGuidThroughtThis());

作为输出,您将得到如下结果:118723

Try:console.log(JD.Guid.newGuid());您想如何访问您的功能?谢谢@johnyaw。问题已更新。如果您的本地作用域(因为您希望从任何位置调用)具有
JD
,请尝试调用
window.JD.Guid.newGuid()
,否则,我看不出有任何错误,您可以从您站点的任何位置调用
JD.Guid.newGuid()
,(如果当前作用域或父层次结构作用域中除窗口的作用域外没有“JD”)谢谢,这正是我正在寻找的,发现这个链接可能会在将来帮助其他人很酷!是的,链接很有用。是的,它确实有用,尽管另一个答案谈到了
模块
设计模式,这正是我所追求的。尽管你的答案与问题相符。