У меня изначально был код вроде ниже, где у меня ничего не было в глобальном пространстве имен, и мне удалось вызвать функции в obj2 из obj1 и наоборот. И все было хорошо.Функция JavaScript, содержащая объекты, которые могут обращаться друг к другу
(function() {
var obj1 = {
obj1_f1 : function() {
},
obj1_f2 : function() {
obj2.obj2_f1();
}
};
var obj2 = {
obj2_f1 : function() {
obj1.obj1_f1();
},
obj2_f2 : function() {
}
};
$(document).ready(function() {
obj1_f1();
});
})();
Но теперь мне нужно вызвать функцию в obj1 объекта из глобального контекста, так что я должен ввести глобальный объект:
var com_mycompany_make_sure_unique = new function() {
// use 'this.' so that obj1 is not in the global namespace
this.obj1 = {
obj1_f1 : function() {
},
obj1_f2 : function() {
com_mycompany_make_sure_unique.obj2.obj2_f2();
}
};
this.obj2 = {
obj2_f1 : function() {
com_mycompany_make_sure_unique.obj1.obj1_f1();
},
obj2_f2 : function() {
}
};
$(document).ready(function() {
com_mycompany_make_sure_unique.obj1.obj1_f1();
});
};
, но я не слишком доволен тем, что - Перед вызовом функций через obj1 и obj2 мне нужно добавить все вызовы функций с моим глобальным именем объекта. Я думаю, что мне не хватает трюка.
Спасибо за любую помощь,
Пол
Возможно, я ошибаюсь, но если я правильно понял, это похоже на круговую ссылку и, скорее всего, это ошибка дизайна. – Dalorzo
Первая функция не будет работать; «готовый» обработчик должен, вероятно, вызывать 'obj1.obj1_f1()', потому что в этой точке нет видимого символа, называемого просто 'obj1_f1'. – Pointy
@Pointy: Ну, символ виден, но его значение 'undefined'. :-) –