#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();
}
}