考虑以下代码:
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
中,我可以看到函数在那里:
对我做错的任何帮助或指导都会很棒。我可能有一个愚蠢的日子,看不到它。
谢谢, MIKEY
答案 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
。
尝试传递参数:)