2015-04-22 46 views
0

考虑以下代码:为什么我的对象中的函数返回undefined?

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

上,我做错了什么将是伟大的任何帮助或指导。我可能有一个愚蠢的一天,看不到它。

感谢, 米奇

+3

'tabsPre'是一个函数。你为什么期望'MSE.Module.tabsPre.changeTab()'工作? – thefourtheye

+7

'changeTab'需要一个参数。所以你的第二个控制台是'undefined'。像MSE.Module.tabsPre()一样传递任何参数。changeTab(1)' –

+1

只要尝试任何东西......甚至是愚蠢的东西。 –

回答

2

ChangeTab返回其传递给它的指定参数和,因为你没有传递任何参数将其打印不确定,请尝试:

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

我是个白痴。谢谢! –

1

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

尝试传递参数:)

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

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

相关问题