为什么我的对象中的函数返回undefined?

时间:2015-04-22 15:24:01

标签: javascript object

考虑以下代码:

var MSE = {
    Module : {}
};

MSE.Module = (function() {

    'use-strict';

    var app = {

        tabsPre : function() {

            var tabsPre = {
                init : function() {

                },
                changeTab : function(arg) {
                    return arg;
                }
            };

            tabsPre.init();
            return tabsPre;
        }
    };

    return app;

})();

console.log( MSE.Module.tabsPre() );
console.log( MSE.Module.tabsPre().changeTab() ); // undefined
console.log( MSE.Module.tabsPre.changeTab() ); // Uncaught TypeError: MSE.Module.tabsPre.changeTab is not a function

我正在尝试访问changeTab()对象中的tabsPre,但我似乎无法访问。最后两个console.log陈述没有给我我所希望的。我怎么能这样做?

这是一个JSFiddle:https://jsfiddle.net/xhb16qL6/

在第一个console.log中,我可以看到函数在那里:

enter image description here

对我做错的任何帮助或指导都会很棒。我可能有一个愚蠢的日子,看不到它。

谢谢, MIKEY

4 个答案:

答案 0 :(得分:2)

ChangeTab返回传递给它的args并且因为你没有传递任何参数而打印未定义,请尝试:

console.log(MSE.Module.tabsPre().changeTab("args"))  //"args"

答案 1 :(得分:2)

console.log( MSE.Module.tabsPre() );

这会记录您要返回的tabsPre对象

console.log( MSE.Module.tabsPre().changeTab() );

这会记录MSE.Module.tabsPre().changeTab()的结果undefined,因为您没有传递参数

console.log( MSE.Module.tabsPre.changeTab() );

这会导致错误,因为MSE.Module.tabsPre是一个函数,因此您无法访问它的属性,因为它们不存在

答案 2 :(得分:2)

JavaScript不会检查参数的数量。

假设我有一个方法,比如说add并定义如下:

function add(arg1, arg2){

}

我用3种不同的方式调用这种方法,假设:

1) add(1,2)   // Works just fine

2) add(1,2,3) // My third argument is ignored.

3) add(1)    // 2nd expected parameter is taken to be `undefined`

您的问题是第3场景。

您的changeTab方法需要一个参数。如果您在通话changeTab时未通过任何内容,则会看到undefined

答案 3 :(得分:1)

changeTab ()函数需要一个参数。然后代码返回一旦被调用就传递的参数。由于您没有传递参数,因此返回undefined

尝试传递参数:)