2016-03-13 6 views
0

Я новичок в IIFE и пытается реализовать пространство имен в JavaScript на классе 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.InsideIIFE в myIIFE, и это вызывает у меня ошибку:

myIIFE.InsideIIFE is not a constructor 

Я что-то не так? Или если это правильный подход, то какие изменения я должен внести.

Я пробовал использовать new this.InsideIIFE() и только InsideIIFE, но не из них работал.


редактировать:

Из моего анализа, я понимаю, что myIIFE (родительский) является объектом, как он возвращает объект в:

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

ответ

0

Есть много проблем с этим кодом, давайте попробуем запустить его в наших головах с начала:

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

Смежные вопросы