реализация пространства имен в javascript

#javascript #namespaces

#javascript #пространства имен

Вопрос:

Я использую следующий формат, чтобы избежать возможных конфликтов именования. Моя главная цель — сохранить части программы в разных файлах во время разработки, а затем позже объединить ее Редактор — это

main.js

 Editor=function(){
    this.manage=function(){

    }

}
var editor= new Editor;
  

a.js

 Editor.prototype.A=function(){
        this.afunct=function(){

       }
}
  

b.js

 Editor.prototype.B=function(){
      var this.var1;
      var this.var2;
      this.bfunct=function(){
           //call afunct() here
      }
}
  

A — это набор функций, который выполняет некоторое тестирование, модификацию и т.д.
afunct — это тестовая функция, которую необходимо использовать во всех других файлах.
Предполагается, что B действует как пакет данных, и для передачи будут созданы его новые экземпляры.

Как я буду вызывать afunct внутри bfunct? Пожалуйста, помогите мне понять, как я могу это сделать. Заранее благодарю вас.

PS. Я в некотором роде новичок в Javascript и, пожалуйста, простите за любой недостаток в моей логике.

Ответ №1:

Это неясно, но это может сделать это:

 (function() {

    var Editor = function() {

    };

    Editor.prototype = {
        A: {
            afunct: function() {
                // Other functionality here.
            }
        },
        B: {
            bfunct: function() {
                Editor.prototype.A.afunct.call(this);
            }
        }
    };

    window.Editor = Editor;

})();


var editor = new Editor();

editor.B.bfunct();
  

Комментарии:

1. пространство имен. где вы делаете variable = new something; etc etc..

2. @Eli я думаю, но у вас в бесконечном цикле OP хочет вызывать только A из B, а не B из A

3. Ах, вы правы (хороший улов). Я просто пытался продемонстрировать, что вы можете вызывать любой метод из другого. Я буду обновлять снова 🙂

4. Кроме того, не могли бы вы сказать мне, почему функция создана для выполнения (завернутая в(function(){ } )()?

5. Экземпляры B должны создаваться внутри редактора, а не вне его.

Ответ №2:

Изнутри B это должно сработать

 Editor.A.apply(this)
  

Комментарии:

1. Вызывает функцию с заданным значением this developer.mozilla.org/en/JavaScript/Reference/Global_Objects /…

Ответ №3:

Попробуйте это изнутри Editor.prototype.B :

 Editor.prototype.B=function(){
      var this.var1;
      var this.var2;
      var self = this;
      this.bfunct=function(){
           //call afunct() here
           self.prototype.B.afunct();
      }
}