Javascript 为什么我的对象中的函数返回未定义?
考虑以下代码:Javascript 为什么我的对象中的函数返回未定义?,javascript,object,Javascript,Object,考虑以下代码: var MSE = { Module : {} }; MSE.Module = (function() { 'use-strict'; var app = { tabsPre : function() { var tabsPre = { init : function() { }, changeTab : fu
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
我正在尝试访问tabsPre
对象中的changeTab()
,但似乎无法访问。最后两个console.log
语句并没有给我我所希望的结果。我该怎么做
下面是一个JSFIDLE:
在第一个console.log
中,我可以看到函数存在:
任何关于我做错了什么的帮助或指导都会很好。我可能有一天很无聊,看不见
谢谢,
MikeyChangeTab返回传递给它的参数,它打印未定义,因为您没有传递任何参数,请尝试:
console.log(MSE.Module.tabsPre().changeTab("args")) //"args"
changeTab()
函数需要一个参数。然后,代码返回调用后传递的参数。由于没有传递参数,因此返回undefined
尝试传递参数:)
这将记录要返回的tabsPre对象
console.log( MSE.Module.tabsPre().changeTab() );
这将记录MSE.Module.tabsPre().changeTab()
的结果,该结果是未定义的
,因为您没有传递参数
console.log( MSE.Module.tabsPre.changeTab() );
这会导致一个错误,因为
MSE.Module.tabsPre
是一个函数,因此您无法访问它的属性,因为它们不存在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
tabsPre
是一个函数。为什么希望MSE.Module.tabsPre.changeTab()
工作?changeTab
需要一个参数。因此,您的第二个控制台是未定义的。将任何参数传递给它,比如MSE.Module.tabsPre().changeTab(1)
尝试任何事情……甚至愚蠢的事情。让init为tabsPre()
返回一些值,以防您不执行changeTab()
。
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`