相关疑难解决方法(0)

如何在JavaScript中声明命名空间?

如何在JavaScript中创建命名空间,以便我的对象和函数不会被其他同名的对象和函数覆盖?我用过以下内容:

if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}
Run Code Online (Sandbox Code Playgroud)

这样做有更优雅或简洁的方式吗?

javascript namespaces javascript-namespaces

973
推荐指数
19
解决办法
53万
查看次数

这个JavaScript模式叫什么,为什么用?

我正在研究THREE.js并注意到一个模式,其中函数的定义如下:

var foo = ( function () {
    var bar = new Bar();

    return function ( ) {
        //actual logic using bar from above.
        //return result;
    };
}());
Run Code Online (Sandbox Code Playgroud)

(示例请参见此处的 raycast方法).

这种方法的正常变化如下所示:

var foo = function () {
    var bar = new Bar();

    //actual logic.
    //return result;
};
Run Code Online (Sandbox Code Playgroud)

将第一个版本与正常变体进行比较,第一个版本似乎有不同之处:

  1. 它分配自执行功能的结果.
  2. 它在此函数中定义了一个局部变量.
  3. 它返回包含使用局部变量的逻辑的实际函数.

因此,主要区别在于,在第一个变体中,条形图在初始化时仅分配一次,而第二个变体在每次调用时都创建此临时变量.

我最好猜测为什么使用它是为了限制bar的实例数(只有一个),从而节省了内存管理开销.

我的问题:

  1. 这个假设是否正确?
  2. 这个模式有名字吗?
  3. 这是为什么用的?

javascript closures iife

100
推荐指数
5
解决办法
6946
查看次数

JavaScript命名空间声明

我创建了一个javascript类如下:

var MyClass = (function() {
   function myprivate(param) {
      console.log(param);
   }

   return {
      MyPublic : function(param) {
         myprivate(param);
      }
   };
})();

MyClass.MyPublic("hello");
Run Code Online (Sandbox Code Playgroud)

上面的代码是有效的,但我的问题是,如果我想将命名空间引入该类.

基本上我希望能够像这样调用类:

Namespace.MyClass.MyPublic("Hello World");
Run Code Online (Sandbox Code Playgroud)

如果我添加了Namespace.MyClass,它将抛出错误"语法错误".我确实尝试添加"window.Namespace = {}",但它也不起作用.

谢谢.. :)

javascript

30
推荐指数
2
解决办法
1万
查看次数