2015-04-22 52 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

相關問題