Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将参数传递给基于类的节点模块_Javascript_Node.js - Fatal编程技术网

Javascript 将参数传递给基于类的节点模块

Javascript 将参数传递给基于类的节点模块,javascript,node.js,Javascript,Node.js,我有这个Node.js模块结构: class Foo { log() { console.log(this.bar); // should log 'hello' } } module.exports = new Foo; 我如何“要求”上述内容并通过“bar”作为参数 例如,沿着这些路线的东西: var Foo = require("./foo.js")("hello"); 我对如何使用基于类的模块实现这一点特别感兴趣 更新:基于类的单例是个坏主意™。我改为使用对象

我有这个Node.js模块结构:

class Foo {

  log() {
    console.log(this.bar); // should log 'hello'
  }
}

module.exports = new Foo;
我如何“要求”上述内容并通过“bar”作为参数

例如,沿着这些路线的东西:

var Foo = require("./foo.js")("hello");

我对如何使用基于类的模块实现这一点特别感兴趣



更新:基于类的单例是个坏主意™。我改为使用对象文本模块结构。

您可以更改
foo.js
以导出类,而不是它的实例,并添加一个构造函数,将第一个参数分配给
this.bar

class Foo {
  constructor(bar) {
    this.bar = bar;
  }

  log() {
    console.log(this.bar); // should log 'hello'
  }
}

module.exports = Foo;
然后你可以这样使用它:

var foo = new (require("./foo.js"))("hello");
foo.log();

您可以更改
foo.js
以导出类,而不是它的实例,并添加一个构造函数,该构造函数将第一个参数分配给this.bar:

class Foo {
  constructor(bar) {
    this.bar = bar;
  }

  log() {
    console.log(this.bar); // should log 'hello'
  }
}

module.exports = Foo;
然后你可以这样使用它:

var foo = new (require("./foo.js"))("hello");
foo.log();

您正在混合类和模块定义。您不导出实例。导出一个定义,并在导入后实例化它。然后你必须调用一个函数

如果您使用的是ECMA2015类,那么您可以编写:

export default class Foo {
  constructor(bar) {
    this._bar = bar; 
  }

  log() {
    console.log(this._bar);
  }
}
那么您的呼叫代码应该如下所示:

import Foo from './foo.js';
let foo = new Foo('Boom!'); 
foo.log();

import关键字的使用方式与ES5中的require类似。

您在混合类和模块定义。您不导出实例。导出一个定义,并在导入后实例化它。然后你必须调用一个函数

如果您使用的是ECMA2015类,那么您可以编写:

export default class Foo {
  constructor(bar) {
    this._bar = bar; 
  }

  log() {
    console.log(this._bar);
  }
}
那么您的呼叫代码应该如下所示:

import Foo from './foo.js';
let foo = new Foo('Boom!'); 
foo.log();

import关键字的使用与ES5中的require类似。

从不导出类实例。要么使用对象文字(对于单例),要么导出类本身。删除括号不会改变任何事情,您需要避免的是
新的
!永远不要导出类实例。要么使用对象文字(对于单例),要么导出类本身。删除括号不会改变任何事情,您需要避免的是
新的
!我很确定我没有把它们混在一起——我在问题中提出的方式也会实例化导入的定义。问题是我不能直接从
require
语句将参数传递给构造函数。有很多方法可以实现我想要的,但我特别想做到这一点——使用单行的
require
Yes来实例化参数,但是您必须用参数来实例化它。您不能在导出中调用new,然后在变量声明中尝试传递构造函数参数。不,我不能。我发布的代码在
require
上将自身实例化为单例(因为缺少更好的表达式)。无需使用
new
重新实例化它。它已作为实例导出。我认为我做事的方式不允许做我想做的事情,所以我换了一种不同的模式。谢谢anyway@NicholasKyriakides:如果你想要单身,你不应该使用
@Bergi,我就是这么做的。我已经将@Gothdo-answer标记为正确,因为它是唯一一个在单行
require
中实例化的。看起来这是一个可怕的反模式,但它以最好的方式回答了这个问题。我很确定我没有把它们混在一起——要求我在问题中提出的方式也会实例化导入的定义。问题是我不能直接从
require
语句将参数传递给构造函数。有很多方法可以实现我想要的,但我特别想做到这一点——使用单行的
require
Yes来实例化参数,但是您必须用参数来实例化它。您不能在导出中调用new,然后在变量声明中尝试传递构造函数参数。不,我不能。我发布的代码在
require
上将自身实例化为单例(因为缺少更好的表达式)。无需使用
new
重新实例化它。它已作为实例导出。我认为我做事的方式不允许做我想做的事情,所以我换了一种不同的模式。谢谢anyway@NicholasKyriakides:如果你想要单身,你不应该使用
@Bergi,我就是这么做的。我已经将@Gothdo-answer标记为正确,因为它是唯一一个在单行
require
中实例化的。看起来这是一个可怕的反模式,但它以最好的方式回答了这个问题。