为什么我的JS应该返回一个对象返回undefined?

时间:2011-11-23 20:54:45

标签: javascript class object

好的,因为我理解了我的代码,我创建了一个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 个答案:

答案 0 :(得分:4)

再次插入分号!

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

需要

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

这是JavaScript中“功能”的结果,它只用return查看你的行,并说:“哦,你忘了你的分号,我会为你添加它。”

它将return更改为return;,因此您的函数现在返回undefined,然后您在其下方有一些裸JSON,这是您的错误的来源。 Douglas Crockford实际上将此描述为JavaScript的“可怕部分”之一。

故事的寓意是:总是在用JavaScript编码时将你的大括号放在同一行。

答案 1 :(得分:4)

你的问题是致命的"假设的分号"在返回行中:

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

更改为

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

并且您的代码应该运行。

答案 2 :(得分:0)

上面已经描述了“假定的分号”问题。但是不要使用那么多函数调用!

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

也适用,甚至更短:

var slides; // unused variable ???
return {
    init: function init(s) {
        slides = s;
        sortSlides();
        startTimer();
        addListeners();
    }
}