gpt4 book ai didi

javascript - 将 Singleton JS 对象转换为使用 ES6 类

转载 作者:行者123 更新时间:2023-12-02 22:59:44 31 4
gpt4 key购买 nike

根据我的文章,我将 ES6 与 Webpack es6-transpiler 结合使用:http://www.railsonmaui.com/blog/2014/10/02/integrating-webpack-and-the-es6-transpiler-into-an-existing-rails-project/

将两个 Singleton 对象转换为使用 ES6 类有意义吗?

import { CHANGE_EVENT } from "../constants/Constants";

var EventEmitter = require('events').EventEmitter;
var merge = require('react/lib/merge');

var _flash = null;

var BaseStore = merge(EventEmitter.prototype, {

emitChange: function() {
this.emit(CHANGE_EVENT);
},

/**
* @param {function} callback
*/
addChangeListener: function(callback) {
this.on(CHANGE_EVENT, callback);
},

/**
* @param {function} callback
*/
removeChangeListener: function(callback) {
this.removeListener(CHANGE_EVENT, callback);
},

getFlash: function() {
return _flash;
},

setFlash: function(flash) {
_flash = flash;
}
});

export { BaseStore };

这是文件 ManagerProducts.jsx,其中有一个应从 BaseStore 扩展的单例。

/**
* Client side store of the manager_product resource
*/
import { BaseStore } from "./BaseStore";
import { AppDispatcher } from '../dispatcher/AppDispatcher';
import { ActionTypes } from '../constants/Constants';
import { WebAPIUtils } from '../utils/WebAPIUtils';
import { Util } from "../utils/Util";
var merge = require('react/lib/merge');

var _managerProducts = [];

var receiveAllDataError = function(action) {
console.log("receiveAllDataError %j", action);
WebAPIUtils.logAjaxError(action.xhr, action.status, action.err);
};

var ManagerProductStore = merge(BaseStore, {
getAll: function() {
return _managerProducts;
}
});

var receiveAllDataSuccess = function(action) {
_managerProducts = action.data.managerProducts;
//ManagerProductStore.setFlash({ message: "Manager Product data loaded"});
};


ManagerProductStore.dispatchToken = AppDispatcher.register(function(payload) {
var action = payload.action;
if (Util.blank(action.type)) { throw `Invalid action, payload ${JSON.stringify(payload)}`; }

switch(action.type) {
case ActionTypes.RECEIVE_ALL_DATA_SUCCESS:
receiveAllDataSuccess(action);
break;
case ActionTypes.RECEIVE_ALL_DATA_ERROR:
receiveAllDataError(action);
break;
default:
return true;
}
ManagerProductStore.emitChange();
return true;
});

export { ManagerProductStore };

最佳答案

没有。没有任何意义。

这是 es6 中单例对象的一个​​非常简单的示例:

let appState = {};
export default appState;

如果你真的想在单例方法中使用类,我建议不要使用“静态”,因为它对于单例来说更令人困惑,至少对于 JS 来说是这样,而是将类的实例作为单例返回,如下所示...

class SomeClassUsedOnlyAsASingleton {
// implementation
}

export default new SomeClassUsedOnlyAsASingleton();

这样你仍然可以使用 JavaScript 提供的所有你喜欢的类,但它会减少困惑,因为 IMO 静态在 JavaScript 类中并不完全支持,因为它在类型语言中,如 C# 或 Java,因为它仅支持静态方法,除非您只是伪造它并将它们直接附加到一个类(在撰写本文时)。

关于javascript - 将 Singleton JS 对象转换为使用 ES6 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205565/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com