【问题标题】:using traditional javascript objects in node JS在节点 JS 中使用传统的 javascript 对象
【发布时间】:2014-09-03 13:42:22
【问题描述】:

我正在尝试做一个 NODE JS 项目,并学习 Node JS 结构的来龙去脉。我已经在互联网上查看了如何在很少或没有运气的情况下做到这一点。问题如下:

我有一个名为 player 的类,它是在一个名为 player.js 的文件中创建的

var playa = function ()
 {

       this.createPlayer = function(){

       }

 }

在我的 index.js 文件中,我链接了我的播放器

      var playa = require("./player.js");

但是,当我尝试引用我的播放器时

  io.on('connection', function(socket){
       var player =   new playa();
        player.createPlayer();
});

控制台告诉我 playa 不是函数并且服务器停止。

  1. 我什至可以在节点中使用传统的 OOP JS 吗?如果我将这个类移动到 index.js 文件中,它的效果会非常好,但是它会变得很草率,因为这个类很大,我计划至少使用 5 个类。

2.如果也可以以这种方式构造我的对象,我该如何正确链接/引用它们?

  1. 如果两者都没有或不可能,那么构建我的对象的正确方法是什么?我希望不要脱离我目前的惯例,因为这是我习惯的,我需要创建多个播放器实例。

【问题讨论】:

  • 我认为您没有正确地从模块中导出符号。
  • 目前您不会从您的player.js 模块中导出任何内容(或将undefined 作为默认值)。因此出现错误。
  • 我尝试使用模块导出。当我这样做时,cosnole 告诉我我有一个类型错误并且 playa 不是函数@Sirko

标签: javascript node.js object


【解决方案1】:

如果您将构造函数导出为module.exports属性,那么您必须将其作为require() 返回值的属性来引用:

var playa = require("./player.js");
var player = new playa.playa();

如果你想让require()返回函数本身,你可以写

module.exports = function()
{
   this.createPlayer = function(){

   }
}

【讨论】:

  • 所以首先我必须引用命名空间,即导出而不是底层类。天哪,我觉得很害羞,。谢谢@Pointy
  • @Dnaso 可以这样想:require() 的返回值是导入模块运行时module.exports 的值。它从一个简单的空对象开始,但你可以让它成为你想要的任何东西 - 在这种情况下,一个函数。
  • 有趣。我有点喜欢 Node 让你构建脚本的方式。
【解决方案2】:

将此添加到 player.js 文件的底部

module.exports.playa = playa;

这将允许该“类”可用

编辑

您将需要创建一个如下所示的实例:

var p = require('./player.js')
var player = new p.playa();

【讨论】:

  • var player = new playa(); ^ 类型错误:对象不是函数
  • 那是控制台输出,然后是我的服务器崩溃
  • @tier1 目前您对函数的大写/小写字母有误。您导出为小写,但使用大写。
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2016-11-12
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多