javascript - 无法在 ES6 类上调用静态函数

标签 javascript class ecmascript-6 static

我在“helpers”文件夹中有一个名为 helpers.js 的文件。内容如下:

class Helpers {
    constructor(config) {
        if (this._singleton) {
            throw new Error('A singleton has already been created.');
        }

        this._singleton = this;
    }

    /**
     * Gets the singleton object.
     * @returns {Helpers}
     */
    static getSingleton() {
        return this._singleton;
    }
}

module.exports = Helpers;

然后在 /helpers/user.js 中,我想获取助手的单例实例。 这是我的代码:

const helpers  = require('../helpers').getSingleton();

const Helpers  = require('../helpers');
const helpers  = Helpers.getSingleton();

我不断收到的错误是:

TypeError: require(...).getSingleton is not a function

TypeError: Helpers.getSingleton is not a function

如果我将鼠标悬停在 VSCode 中的 Helpers 上,我会得到这个工具提示

Helpers Tooltip

而且,每当我将鼠标悬停在 getSingleton() 上时,我都会得到这个工具提示:

getSingleton() tooltip

所以路径是正确的,但它仍然给我错误。

最佳答案

在 JavaScript 中实现单例模式的最简单方法是根本不导出类,例如

class Helpers {}

let helper;
module.exports = function() {
   if (!helper) helpers = new Helpers();
   return helper;
};

// loaded with
var helpers = require('../helpers')(); // note the extra () to call it

甚至更好,因为我们不局限于类似 Java 的行为,只需完全跳过该函数并执行

class Helpers {}
module.exports = new Helpers();

// loaded with
var helpers = require('../helpers');

但是然后如果您的所有模块导出的都是类的单个实例,那么一开始就没有理由使用类。你也可以这样做

exports.helperMethodOne = function(){};
exports.helperMethodTwo = function(){};
exports.helperMethodThree = function(){};

// loaded with
var helpers = require('../helpers');

module.exports = {
  helperMethodOne() {},
  helperMethodTwo() {},
  helperMethodThree() {},
};

// loaded with
var helpers = require('../helpers');

关于javascript - 无法在 ES6 类上调用静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039542/

相关文章:

javascript - IE Explorer 9 直到 ajax/json 函数完成后才呈现

javascript - FileUploader 的 uploadComplete-Event 的响应未定义

jquery 从 li 中的图像中删除类

python - 在Python中,如何在初始化时将类的每个新实例添加到列表中?

Javascript 根据字段的值对数组进行任意排序

javascript - 使用 ES6 将对象数组映射到带有 header 的数组数组

javascript - 如何在 n 秒后停用 MutationObserver?

JavaScript:是否定义了成员?

javascript - 合并多个对象数组并平均重复值javascript

c++ - 如何将结构模板标记为好友?