从另一个文件调用Javascript对象时出错

从另一个文件调用Javascript对象时出错,javascript,object,Javascript,Object,我创建了一个新的client.messages2.js文件,其中只包含我想要使用的函数,并根据Jonathan的建议重写了这些函数: var clientMessages = function(){ var self = this; self.message = function (type) { var that = {}; that.type = type; return that; }; self.request = function (type) {

我创建了一个新的client.messages2.js文件,其中只包含我想要使用的函数,并根据Jonathan的建议重写了这些函数:

var clientMessages = function(){
var self = this;

self.message = function (type) {
    var that = {};
    that.type = type;
    return that;
};

self.request = function (type) {
    var that = message(type);
    return that;
};

self.request = function (type) {
    var that = message(type);
    return that;
};

self.requestConfiguration = function (type, params) {
    var that = request(type);
    [...some code here...]
    return that;
};

self.requestGetConfiguration = function (params) {
    var that = requestConfiguration("RequestGetConfiguration", params);
    return that;
};

self.requestSetConfiguration = function (params) {
    var that = requestConfiguration("RequestSetConfiguration", params);
    return that;
};
}
var clientMessages = new clientMessages();
html文件中加载了以下文件:

<script src="{{ url_for('static', filename='lib/jquery-1.11.3.min.js') }}"></script>
<script src="{{ url_for('static', filename='lib/require.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/clientlibs/client.messages2.js') }}"></script>
我还尝试了不带括号的requestGetConfiguration:

var clientMessages = require(["/static/scripts/clientlibs/client.message2.js"]);
var request = clientMessages.requestGetConfiguration;
在第一种情况下,我得到以下错误:

未捕获类型错误:clientMessages.requestGetConfiguration不是函数

在这两种情况下,我都得到以下结果:

未能加载资源:服务器以404状态响应 (未找到)require.js:8未捕获错误:的脚本错误 “/static/scripts/clientlibs/client.message2.js”


请注意,我可以在Chrome中查看和编辑client.message2.js。它位于localhost:5000/static/scripts/clientlibs/client.message2.js下,看起来像是范围问题

由于前缀
var
您的函数requestSetConfiguration是私有的

要创建公共函数,请尝试使用以下内容:

var self = this;
self.clientMessages { ...
下面是一个如何执行此操作的示例:

clientMessages.js:(看,我更改了文件名)

main.js:(首先,您必须在html文件中导入clientMessages.js和main.js,或者在main.js中需要clientMessages.js,并进行一些实现)


听起来像是范围问题。您可能需要提供更多的代码,以便我们能够确定“var请求”的作用域。我添加了更多的代码,希望现在更清楚。在代码的最后一行,您通过clientMessages的实例化覆盖了构造函数clientMessages。。。而且您在require()行中使用了相同的(全局?)。@fast,所以最后一行应该省略?至少。。我不确定,如果代码是有效的require.js模块。。。通常,在为不同的东西使用相同的标识符时要小心,最好使用不同的标识符,直到您非常确定:)您的意思是在client.messages.js中应该是:
define([“/client.parameters]”,function(clientParameters){var self=this;self.clientMessages={
因为我这样做了,但它不起作用…谢谢你的帮助,但我无法让它起作用。我按照你的建议添加了require.js,然后在我的主要代码中添加了以下代码:
require([“/libs/client.messages.js]”,function(clientMessages){var request=clientMessages.requestGetConfiguration;});
结果是一条错误消息“require is not defined”。我也尝试了define,但错误消息相同(“define is not defined”)。同样奇怪的是,即使没有require,我的IDE也会识别clientMessages对象,当我按住CTRL键并单击它时,它会将我重定向到正确的函数。但是代码无法识别它。您是否在html文件中添加require.js?类似这样的内容,我建议您遵循require sintax:var clientMessages=require(“./libs/clientMessages”);很抱歉,它不起作用。根据您的建议,我已经用现在的代码更新了我的问题。我还添加了我现在遇到的错误。
var self = this;
self.clientMessages { ...
var ClientMessages = function(){
   var self = this;
   self.requestSetConfiguration = function(params){...};
}
var clientMessages = new ClienteMessages();
...
clientMessages.requestSetConfiguration(params);