使用 require 在 JavaScript 中访问匿名函数外部的全局变量
Access global variable outside of anonymous function in JavaScript using require
我正在开发一个 HTML5 实时多人游戏,我有一个 game_core.js 文件,其中 运行 使用 p2 库的游戏物理。我想 运行 这个文件在客户端和权威服务器上都可以进行预测。这是构造函数和 module.exports:
function gameCore() {
this.world = new p2.World({gravity:[0, 0]});
this.players = {};
this.step = 1/60;
}
...
module.exports = gameCore;
因为我在 index.html
中加载 p2.js 文件
<script type="text/javascript" src="lib/p2.js"></script>
<script type="text/javascript" src="game_client.js"></script>
<script type="text/javascript" src="game_core.js"></script>
构造函数找到 p2 对象,一切正常。但是我的问题是当我尝试 运行 服务器上的这个文件时,因为我找不到访问 p2 对象的正确方法,它是 game_server.js:[=17= 上的全局变量]
var
io = require('socket.io'),
express = require('express'),
UUID = require('node-uuid'),
p2 = require('p2'),
verbose = false,
http = require('http'),
app = express(),
config = require('./config.json'),
gameCore = require('./game_core.js'),
server = http.createServer(app);
var world = new gameCore();
我收到这个错误:
this.world = new p2.World({gravity:[0, 0]});
^
ReferenceError: p2 is not defined
如果我在 gameCore 上创建一个 p2 属性,在构造函数中将 world 保留为 null,将全局 p2 分配给 gameCore 的 p2,然后使用初始化函数将正确的值分配给 world
function gameCore() {
this.p2 = null;
this.world = null;
this.players = {};
this.step = 1/60;
}
gameCore.prototype.init = function() {
this.world = new this.p2.World({gravity:[0, 0]});
}
它有效,但由于我需要在 gameCore 的其他 类 上执行此操作,我得到了堆栈溢出。如果我使用
var p2 = require('p2');
在 gameCore 上它可以工作,但客户抱怨使用 require。
我是JavaScript的新手,但我看过闭包、匿名函数和许多类似的疑惑。不幸的是我还没有解决这个问题。
browserify 允许您在客户端 js 文件中使用 require。
如果你想在构造函数中使用 p2,你还需要 game_core.js require p2。
您使用 browserify 的客户端文件应如下所示
<script src="bundle.js"></script> <!-- browserify p2 game_core.js config.json --->
<script>
var p2 = require('p2 ');
var game_core= require('game_core.js');
var config= require('config.json');
/* ... */
</script>
我正在开发一个 HTML5 实时多人游戏,我有一个 game_core.js 文件,其中 运行 使用 p2 库的游戏物理。我想 运行 这个文件在客户端和权威服务器上都可以进行预测。这是构造函数和 module.exports:
function gameCore() {
this.world = new p2.World({gravity:[0, 0]});
this.players = {};
this.step = 1/60;
}
...
module.exports = gameCore;
因为我在 index.html
中加载 p2.js 文件<script type="text/javascript" src="lib/p2.js"></script>
<script type="text/javascript" src="game_client.js"></script>
<script type="text/javascript" src="game_core.js"></script>
构造函数找到 p2 对象,一切正常。但是我的问题是当我尝试 运行 服务器上的这个文件时,因为我找不到访问 p2 对象的正确方法,它是 game_server.js:[=17= 上的全局变量]
var
io = require('socket.io'),
express = require('express'),
UUID = require('node-uuid'),
p2 = require('p2'),
verbose = false,
http = require('http'),
app = express(),
config = require('./config.json'),
gameCore = require('./game_core.js'),
server = http.createServer(app);
var world = new gameCore();
我收到这个错误:
this.world = new p2.World({gravity:[0, 0]});
^
ReferenceError: p2 is not defined
如果我在 gameCore 上创建一个 p2 属性,在构造函数中将 world 保留为 null,将全局 p2 分配给 gameCore 的 p2,然后使用初始化函数将正确的值分配给 world
function gameCore() {
this.p2 = null;
this.world = null;
this.players = {};
this.step = 1/60;
}
gameCore.prototype.init = function() {
this.world = new this.p2.World({gravity:[0, 0]});
}
它有效,但由于我需要在 gameCore 的其他 类 上执行此操作,我得到了堆栈溢出。如果我使用
var p2 = require('p2');
在 gameCore 上它可以工作,但客户抱怨使用 require。
我是JavaScript的新手,但我看过闭包、匿名函数和许多类似的疑惑。不幸的是我还没有解决这个问题。
browserify 允许您在客户端 js 文件中使用 require。
如果你想在构造函数中使用 p2,你还需要 game_core.js require p2。
您使用 browserify 的客户端文件应如下所示
<script src="bundle.js"></script> <!-- browserify p2 game_core.js config.json --->
<script>
var p2 = require('p2 ');
var game_core= require('game_core.js');
var config= require('config.json');
/* ... */
</script>