导出对象中的对象

时间:2012-09-18 16:38:54

标签: javascript oop node.js module

所以我一直在看这篇文章:What is the purpose of Node.js module.exports and how do you use it?并且一直试图在JavaScript对象的范围内理解它。

所以如果我在game.js

中有这个
var myObj = function() { 

    this.function1 = function(){
        ...
    };
};

exports.myObj = myObj;

在另一个文件中,我假设我会做这样的事情:

var RequiredObj = require('game.js');

var RequiredObj = require('game.js').myObj;

我迷路的地方是如何使用这个对象及其功能,以及如何创建这个对象的新实例。

会是这样的吗?

RequiredObj.myObj.function1();

RequiredObj.myObj = new RequiredObj.myObj();

我传递的物体有多大也有限制吗?因为在我的实际脚本中,我的游戏对象是巨大的。

1 个答案:

答案 0 :(得分:2)

假设“其他文件”与game.js位于同一目录中,则此类内容应该有效:

var game = require('./game.js');

var mo = new game.myObj();

mo.function1();

有几点需要注意:

  • 项目中的模块应指定为with a path - 以./..//为首。否则,require将仅在core modulenode_modules folders中搜索模块(例如,通过npm install)。

  • myObj似乎是构造函数,function1将是一个实例方法。因此,RequiredObj.myObj.function1()会因为没有创建实例而出错。

  • 另一方面,RequiredObj.myObj = new RequiredObj.myObj()应该有效... 一次。此行设置了对构造函数的引用,并引用了一个实例,使构造函数(大部分)无法访问。 (“ Mostly ”因为它仍然可以作为RequiredObj.myObj.constructor使用,但为实例声明一个新变量通常更简单。)

  

我传递的物体有多大也有限制吗?

ECMAScript没有对Object的大小定义任何明确的限制。但是,您当然会受到用于执行应用程序的硬件的限制。