Почему мой JS, который должен вернуть объект, не определен? - PullRequest
4 голосов
/ 24 ноября 2011

Хорошо, так как я понимаю свой код, я создал объект promoSlides, у меня есть частная функция с именем init, и в ответ на js замыкание (с которым я не слишком знаком) я возвратил init, чтобы я мог использовать его снаружи глобальновид.Когда я запускаю файл, я получаю, что promoSlides не определен, говорит консоль ошибки FF.Я не уверен, где я ошибся.Я новичок в этом, так что, вероятно, что-то не так.О, и слайды были определены в моем оригинальном документе, но я взял это для простоты

var Slider = (function (name) {return name;}(Slider || {}));

Slider.promoSlides = ( function()
{
var slides;

var init = function(s)
{
    slides = s;
    sortSlides();
    startTimer();
    addListeners();
};
return 
{
    init : function a(s)
    {
        init(s);
    }
};

})();

$(document).ready(function(){
    Slider.promoSlides.init(slides);
});

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

Ваша проблема - смертельная «предполагаемая точка с запятой» в обратной строке:

return //; <-- Javascript puts an implicit EOL here
{
    init : function a(s)
    {
        init(s);
    }
};

Измените на

return {
    init : function a(s)
    {
        init(s);
    }
};

и ваш код должен работать.

4 голосов
/ 24 ноября 2011

Снова вводится точка с запятой!

return 
{
    init : function a(s)
    {
        init(s);
    }
};

должно быть

return {
    init : function a(s)
    {
        init(s);
    }
};

Это результат «функции» в JavaScript, которая просматривает вашу строку с return и говорит: «о, вы забыли свою точку с запятой, я добавлю ее для вас».

Он меняется return на return;, поэтому ваша функция теперь возвращает неопределенное значение, а затем под ней находится какой-то голый JSON, который является источником вашей ошибки. Дуглас Крокфорд фактически описывает это как одну из «ужасных частей» JavaScript.

Итак, мораль этой истории такова: всегда ставьте начальную скобку на одной строке, когда вы кодируете в JavaScript.

0 голосов
/ 24 ноября 2011

Проблема «предполагаемой точки с запятой» уже была описана выше. Но не используйте столько вызовов функций!

var init = function() { ... };
return {
    init : init
};

работает так же, или даже короче:

var slides; // unused variable ???
return {
    init: function init(s) {
        slides = s;
        sortSlides();
        startTimer();
        addListeners();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...