将javascript拆分为多个文件
我有一些javascript代码,基本上是将javascript拆分为多个文件,javascript,Javascript,我有一些javascript代码,基本上是 $( document ).ready(function() { // Global variable definitions // Bunch of functions depending on variables }); 我有没有办法把这些函数分成几个文件,即使它们基本上是相互依赖的 我正在创建一个html5游戏,我想分离很多代码,例如,我希望在一个特定文件中绘制对象的代码,在另一个文件中更新游戏状态的代码,等等,这样我仍然可以访
$( document ).ready(function() {
// Global variable definitions
// Bunch of functions depending on variables
});
我有没有办法把这些函数分成几个文件,即使它们基本上是相互依赖的
我正在创建一个html5游戏,我想分离很多代码,例如,我希望在一个特定文件中绘制对象的代码,在另一个文件中更新游戏状态的代码,等等,这样我仍然可以访问所有全局变量
有没有一种方法可以不费吹灰之力或不重写所有代码就可以做到这一点?如果您真的需要从任何地方访问这些全局变量,仍然有许多方法可以模块化您的代码。这里有一个:
// file 1
(function(){
myapp = myapp || {};
myapp.myvar = ...;
myapp.myfunc = function(){...};
})();
// file 2
(function(){
myapp = myapp || {};
myaapp.myothervar = ...
myapp.myotherfunc = function(){...};
myapp.start = function(){...};
}
})();
// last file
$(myapp.start);
但显然,您必须稍微重构代码
一种变体是定义子模块,这样“全局变量”就不那么全局了。如果不公开太多,它通常更易于管理:如果您有20个文件,并且任何文件的任何LOC都可以访问在别处定义的任何变量,那么很难知道会发生什么。如果您确实需要从任何地方访问这些全局变量,仍然有许多方法可以模块化代码。这里有一个:
// file 1
(function(){
myapp = myapp || {};
myapp.myvar = ...;
myapp.myfunc = function(){...};
})();
// file 2
(function(){
myapp = myapp || {};
myaapp.myothervar = ...
myapp.myotherfunc = function(){...};
myapp.start = function(){...};
}
})();
// last file
$(myapp.start);
但显然,您必须稍微重构代码
一种变体是定义子模块,这样“全局变量”就不那么全局了。如果不公开太多,通常会更易于管理:如果您有20个文件,并且任何文件的任何LOC都可以访问在别处定义的任何变量,那么很难知道会发生什么情况。看看名称空间: 名称空间是的一个概念 通过对代码结构使用分层方法,您可以从抽象对象移动到更具体的对象来构造代码。通常,您会从一个总体对象开始
var JSApp = JSApp || {};
JSApp.someMethod = function() {};
JSApp.someProperty = "foo";
JSApp.someObject = {
internalStuff: "bar"
};
JSApp.implement = function() {
this.someMethod();
};
在另一个文件中:
JSApp.someFactory = function() {
//JSApp is the common namespace.
};
建立这样一个总体结构允许一个单一的全局。现在,通过将代码添加到JSApp
对象,可以将代码分解为多个模块(不同)文件
实现所需做的就是在$(document).ready()回调中调用所需的任何内容
$(document).ready(function() {
JSApp.implement();
});
诚然,在您随意将对象分配给名称空间之前,应该执行一些检查,即使您认为名称空间应该存在。看看名称空间:
名称空间是的一个概念
通过对代码结构使用分层方法,您可以从抽象对象移动到更具体的对象来构造代码。通常,您会从一个总体对象开始
var JSApp = JSApp || {};
JSApp.someMethod = function() {};
JSApp.someProperty = "foo";
JSApp.someObject = {
internalStuff: "bar"
};
JSApp.implement = function() {
this.someMethod();
};
在另一个文件中:
JSApp.someFactory = function() {
//JSApp is the common namespace.
};
建立这样一个总体结构允许一个单一的全局。现在,通过将代码添加到JSApp
对象,可以将代码分解为多个模块(不同)文件
实现所需做的就是在$(document).ready()回调中调用所需的任何内容
$(document).ready(function() {
JSApp.implement();
});
诚然,在您随意将对象分配给命名空间之前,应该执行一些检查,即使您认为命名空间应该存在。很多人都在为此而挣扎,就像您现在所做的那样
旧的方法是使用名称空间对象,如MYAPP
。这样,唯一的全局变量是MYAPP
,您将所有函数/变量都放在上面,如下所示:
file1.js
(function() {
var MYAPP = MYAPP || {};
MYAPP.func = function() { console.log(1); };
}());
file2.js
(function() {
var MYAPP = MYAPP || {};
MYAPP.func(); // 1
}());
浏览器端javascript的主要问题是它没有像其他服务器端语言那样的“include”或“require”。这使得您很难在需要的地方“包含”JS文件(以及它的函数/变量)
如今,人们对此进行了思考,主要通过两种方式来解决问题:
- AMD方式:异步模块定义,允许您异步加载其他JS文件,从而具有某种浏览器端“包含”。这种图书馆最好的例子是。异步加载对于开发目的很好,但是为了性能问题,必须预编译生产代码
- CommonJS方式:使用node.js方式,您同步需要一个模块,并使用
module.exports
对象定义一个模块。但是,在浏览器上使用代码之前,它需要编译部分。这种图书馆最好的例子是。注意,编译部分几乎可以与观察者无缝连接
很多人都像你现在这样挣扎着
旧的方法是使用名称空间对象,如MYAPP
。这样,唯一的全局变量是MYAPP
,您将所有函数/变量都放在上面,如下所示:
file1.js
(function() {
var MYAPP = MYAPP || {};
MYAPP.func = function() { console.log(1); };
}());
file2.js
(function() {
var MYAPP = MYAPP || {};
MYAPP.func(); // 1
}());
浏览器端javascript的主要问题是它没有像其他服务器端语言那样的“include”或“require”。这使得您很难在需要的地方“包含”JS文件(以及它的函数/变量)
如今,人们对此进行了思考,主要通过两种方式来解决问题:
- AMD方式:异步模块定义,允许您异步加载其他JS文件,从而具有某种浏览器端“包含”。这种图书馆最好的例子是。异步加载对于开发目的很好,但是为了性能问题,必须预编译生产代码
- CommonJS方式:使用node.js方式,您同步需要一个模块,并使用
module.exports
对象定义一个模块。但是,在浏览器上使用代码之前,它需要编译部分。这种图书馆最好的例子是。注意,编译部分几乎可以与观察者无缝连接
为什么使用jquery标签?虽然有一些jquery代码,但问题与jquery完全无关。为什么要使用jquery标记?虽然有一些jquery代码,但这个问题与jquerya无关