javascript名称空间类型错误:blah不是函数

javascript名称空间类型错误:blah不是函数,javascript,namespaces,Javascript,Namespaces,我有一个html文件,一个javascript文件和jquery 在javascript中,我有一个带名称空间的函数,返回一个对象,其中包含一个我希望从外部调用的函数。这是为了创建“公共”和“私有”功能 在HTML中,我想触发返回对象中的这个函数。 但它不承认这一点。在控制台中,我收到以下错误: TypeError:BATCH.SendSMS.uploadFiles不是一个函数 这应该行得通,我以前做过,所以我一定做错了什么。你能看一下吗 HTML: <!DOCTYPE html>

我有一个html文件,一个javascript文件和jquery

在javascript中,我有一个带名称空间的函数,返回一个对象,其中包含一个我希望从外部调用的函数。这是为了创建“公共”和“私有”功能

在HTML中,我想触发返回对象中的这个函数。 但它不承认这一点。在控制台中,我收到以下错误:

TypeError:BATCH.SendSMS.uploadFiles不是一个函数

这应该行得通,我以前做过,所以我一定做错了什么。你能看一下吗

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Batch SMS</title>
    <style media="all" type="text/css">
        @import url("main.css");
    </style>

    <script type="text/javascript" src="./js/batchsms.js"></script>
</head>
<body>

<form enctype="multipart/form-data" id="upload-form">
    <div id="fields">

        <div>
            <span>Sender: </span>
            <select id="sender">
                <option value="">Maak keuze</option>
                <option value="Sender1">Sender 1</option>
                <option value="Sender2">Sender 2</option>
                <option value="Sender3">Sender 3</option>
            </select>
        </div>


        <div>
            <span>Phone file:</span>
            <input id="phone" name="phone" type="file">
        </div>

        <div>
            <span>Appointment file:</span>
            <input id="appointment" name="appointment" type="file">
        </div>

        <div>
            <span></span>
            <input type="button" value="Upload Files" onclick="BATCH.SendSMS.uploadFiles();">
        </div>

    </div>
</form>

</body>
</html>

批量短信
@导入url(“main.css”);
发件人:
马克基泽
发送者1
发送者2
发送者3
电话文件:
预约档案:
JS:

var BATCH=BATCH | |{};
BATCH.SendSMS=函数(){
var误差=”;
var setError=函数(){
$('#main').prepend($('').append(error));
};
返回{
上载文件:函数(){
var formData=新的formData($('form')[0]);
//启动ajax请求
$.ajax({
类型:“POST”,
url:“php/upload.php”,
数据:formData,
数据类型:“json”,
成功:功能(数据){
控制台日志(数据);
},
错误:函数(数据){
控制台日志(数据);
},
cache:false,
contentType:false,
processData:false
});
}
};
}

您需要
批处理.SendSMS().uploadFiles()


这是因为
BATCH.SendSMS
是一个使用
uploadFiles
函数返回对象的函数,而不是对象本身。

我找到了一个更好的解决方案

我应该把函数本身返回

例如:

BATCH.SendSMS = function() {

    //do stuff here

}();
最后这个“()”将确保我可以调用:


BATCH.SendSMS.uploadFiles()

是的,可以正常工作。。。虽然我在没有()的情况下也这么做了。。。但那是在javascript中,调用另一个脚本。也许这就是原因。在您上面提供的代码中,如果可能的话,在不调用函数的情况下访问返回对象的属性将非常棘手。
BATCH.SendSMS = function() {

    //do stuff here

}();