Если вы хотите сделать это, вам нужно объявить 'публичную' функцию, как если бы вы работали с частной функцией, а затем выставить ее как публичную. Как это:
$(function() {
var modulePattern = (function($) {
var privateMethod = function() {
appendText("called privateMethod()");
publicAlert();
};
var appendText = function(text) {
var text2 = $('#output').text() + " | " + text;
$('#output').text(text2);
};
var publicAlert = function(){
alert("publicAlert");
};
return {
publicMethod: function() {
appendText("called publicMethod()");
privateMethod();
},
publicAlert: publicAlert
};
});
mp = new modulePattern($);
mp.publicMethod();
});
[Изменить]
Я также рекомендую вам привыкнуть к нажатию на кнопку «jslint» в верхней части jsfiddle, в вашем коде не хватает нескольких точек с запятой, и вы также повторно объявили переменную «text» внутри функции appendText (она уже была передана в)
Кроме того, вы используете шаблон модуля немного иначе, чем я его изучил. У вас есть ссылка на ваш справочный материал?
Вот как бы я сделал шаблон модуля, каким я его знаю: http://jsfiddle.net/sVxvz/
[/ Edit]
Кроме того, если вы правильно используете шаблон модуля, вы можете ссылаться на публичные функции, используя имя модуля, например:
var testModule = (function($) {
var privateMethod = function() {
appendText("called privateMethod()");
testModule.publicAlert();
};
var appendText = function(text) {
var text2 = $('#output').text() + " | " + text;
$('#output').text(text2);
};
return {
publicMethod: function() {
appendText("called publicMethod()");
privateMethod();
},
publicAlert: function() {
alert("publicAlert");
}
};
}(jQuery));
$(function() {
testModule.publicMethod();
});
Но мне это не очень нравится, потому что публичные методы могут быть перезаписаны.
кто-то может пойти testModule.publicAlert = function(){EVIL CODE OF DOOM;};
, и ваша внутренняя работа с радостью выполнит его.