我正在使用以下内容创建插件系统:
function Plugin(thingy, code)
{
var GLOBAL = null;
var arguments = null;
var process = null;
var require = null;
eval(code);
};
plugins.push(new Plugin(thingy, code));
请不要对eval()过于兴奋,使用(' vm')或沙箱不是一个选项,因为这将是一个长时间运行的对象,直到用户卸载它。它也将在其自己的nodeJS实例中运行,因此它们不会影响其他用户。我仍然有同样的问题,无论如何都要将此对象引用传递给沙箱系统。
我关心的是有人看到具有他们需要使用的功能的物品的代码,例如shoot()
console.log(thingy.shoot.toString());
解决这个问题的方法如下:
function thingy()
{
// They can't see this
var _shoot = function(someone)
{
// Load weapon
// Aim
// Fire
};
// They can see this
this.shoot = function(someone)
{
_shoot(someone);
};
};
这样,如果他们是console.log(thingy.shoot.toString()),他们只会看到_shoot(某人);而不是处理拍摄过程的实际代码。
请有人帮我解决以下问题: