【问题标题】:Create object of namespace Javascript singleton class创建命名空间Javascript单例类的对象
【发布时间】:2016-06-28 17:50:09
【问题描述】:

我是 IIFE 的新手,正在尝试在 Siungleton JavaScript 类上的 JavaScript 中实现命名空间:

我有一个 JavaScript 类(比如main 类):

var myIIFE = (function () {
    var x = null;

    //constructor function
    var myIIFE = function() {
        var a = new IIFE.InsideIIFE();  //says not a constructor
    }

    myIIFE.prototype = {
        //some methods
    }

   function createIstance() {
        return new myIIFE();
   }

    return {
       getInstance: function() {
           if (!this.instance) {
                this.instance = createInstance();
           }
           return this.instance;
       }
    };
})();

然后我有另一个 JavaScript 命名空间类:

myIIFE.InsideIIFE = (function() {
     var inside = function() {}
     inside.prototype = { //some methods }
     return inside;
});

我想在myIIFE 中创建一个myIIFE.InsideIIFE 的对象,这给我一个错误:

myIIFE.InsideIIFE is not a constructor

我做错了吗?或者,如果这是一种正确的方法,那么我应该做出哪些改变。

我尝试使用new this.InsideIIFE()InsideIIFE,但它们都不起作用。


编辑:

根据我的分析,我了解到myIIFE(父级)是一个对象,因为它在以下位置返回一个对象:

 return {
     getInstance: function() {
          //method body
     }
 }

【问题讨论】:

    标签: javascript javascript-objects javascript-namespaces


    【解决方案1】:

    这段代码有很多问题,让我们试着从头开始运行它:

    var myIIFE = (function () {
     ....
    })();
    

    这导致myIIFE 成为一个对象,准确地说,这个对象:

    {
       getInstance: function() {
           if (!this.instance) {
                this.instance = createInstance();
           }
           return this.instance;
       }
    }
    

    所以,我假设,你这样做了

    myIIFE.getInstance()
    

    尝试返回new myIIFE();

    它遇到myIIFE() 并尝试这样做:

    new IIFE.InsideIIFE();
    

    我假设你打算写

    new myIIFE.InsideIIFE();
    

    因为IIFE 没有在您提供的代码中的任何地方定义。

    让我们看看myIIFE.insideIIFE是什么

    var myIIFE.InsideIIFE = (function() {
         var inside = function() {}
         inside.prototype = { //some methods }
         return inside;
    });
    

    首先你从var 开始,这是错误的,因为myIIFE 已经定义了,你只是在向它添加一个新属性。所以应该很简单

    myIIFE.InsideIIFE = (function() {
         var inside = function() {}
         inside.prototype = { //some methods }
         return inside;
    });
    

    它应该可以工作。

    总的来说,您的代码似乎还没有很好地掌握整个“构造函数”的概念。我建议您查看以下链接,它们应该会有所帮助。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2014-04-25
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多