我对javascript很新,我正在努力解决一个简单的问题。我必须将代码分成单独的文件。作为一个例子,我有一个名为Database.js的文件。在该文件中,我有以下几行:
function Database(){
//someStuff
this.fetchAll = function(){
//some stuff
return something;
}
}
现在我想在app.js文件中使用Database.js代码。所以我在app.js中编写了以下代码:
var Database = require('Database');
var myDB = new Database();
var result = myDB.fetchAll();
但是,我收到错误Script Error = '[object Database]' is not a constructor (evaluating 'new Database()') at app.js (line 3).
我的错误是什么?
答案 0 :(得分:5)
在进入开发之前,您需要彻底了解CommonJS Modules in Titanium。那么对你来说会更简单。另请参阅require function
让我们来看看你的错误。 [ERROR] [object Database]' is not a constructor (evaluating 'new Database()') at app.js (line 3)
表示您创建的模块不是构造函数。您的构造函数可能不会返回任何值。 阅读simple usage of CommonJS module 。我相信它会解决你的问题。
还有另一种方法,您可以在app.js中包含Database.js文件。您不需要返回任何内容,也不需要使用require函数。您只需使用include method即可。只需在app.js中编写Ti.include('Database.js');
,就可以访问Database.js文件中的所有全局变量和函数
答案 1 :(得分:2)
这个问题已经陈旧但尚未得到解答。所以我只会为在这里访问的人提供答案。
您必须将您的功能导出为全局。为此,您将声明如下
exports.fetchAll = function Database(){
//some stuff
return something;
};
您还可以声明该函数,以便它可以在文件
中全局使用,也可以在本地使用var fetchAll = function Database(){
//some stuff
return something;
};
exports.fetchAll = fetchAll;
然后假设文件名是Database并且它与app.js在同一个文件夹中,您可以使用它如下所示
var Database = require('Database');
var result = Database.fetchAll();
答案 2 :(得分:1)
编辑:这个答案是javascript一般的,它不是面向Appacelerator Titanium。
javascript中没有此类include
或require
。另一方面,您可以执行以下某项操作
在脚本之前加入脚本标记以包含Database.js
<script type="text/javascript" src="Database.js" >
OR
动态添加
function loadScript(url, callback)
{
// adding the script tag to the head as suggested before
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// then bind the event to the callback function
// there are several events for cross browser compatibility
script.onreadystatechange = callback;
script.onload = callback;
// fire the loading
head.appendChild(script);
}
答案 3 :(得分:0)
问题似乎是使用变量名'Database'。也许某个地方存在名称勾结。
对不起,我不知道require的用法不是js的基本概念。
答案 4 :(得分:0)
在这里快速猜测一下。如果您使用CommonJS,那么您必须告诉模块外部应该有什么。你的方式是你已经建立了数据库&#34;对象&#34;你需要添加:
module.exports = Database;
你模块中的某个地方。我总是把它们放在最后 - 但不确定这是一个要求。
您还可以通过指定以下内容在模块外部使用单个功能:
exports.getMyDatabase = getMyDatabase;
其中&#34; getMyDatabase&#34;是您在模块中指定的功能。我用这种方式来隐藏&#34;来自外部的某些功能的某些实现细节,只是提供我希望开发人员能够调用的功能; - )
/约翰
答案 5 :(得分:-4)
我认为这是require js的正确用法:
require(["Database"], function() {
var myDB = new Database();
var result = myDB.fetchAll();
});