实例化 es6 类
instantiating an es6 class
我正在尝试使用 es6 来制作聊天室连接类。我正在使用 rabbitmq/STOMP 将交换数据推送给订阅者。我使用的代码以 es5 风格工作,但我正在硬编码交换名称。我正在使用 webpack/babel 在一个名为 chat.bundle.js
的文件中将此代码转写回 es5,但是当我运行时:
var chatRoom = new ChatRoom('thisExchange');
控制台日志:Uncaught ReferenceError: ChatRoom is not defined
我在加载捆绑包文件后实例化类ChatRoom
(在捆绑包的此脚本标记下方(。
我知道load()
功能可能不起作用...我是 es6 类的新手,不确定如何让 window.load 工作,但这是一个单独的问题。现在,我只想能够通过提供exchangeName
的参数来实例化这个类,然后在此之后继续处理新的错误。
这是我写得很糟糕的 es6 类:
// Use SockJS
Stomp.WebSocketClass = SockJS;
// Connection parameters
var mq_username = "guest",
mq_password = "guest",
mq_vhost = "/",
mq_url = 'http://localhost:15674/stomp',
mq_queue = "/exchange/${this.exchange}";
var output;
var client = Stomp.client(mq_url);
class ChatRoom {
constructor(exchange){
this._exchange=exchange;
}
get exchange(){
return this._exchange;
}
toString() {
return `${this.exchange}`
}
on_connect() {
output.innerHTML += 'Connected to RabbitMQ-Web-Stomp<br />';
console.log(client);
client.subscribe(mq_queue, on_message);
}
// This will be called upon a connection error
on_connect_error() {
output.innerHTML += 'Connection failed!<br />';
}
// This will be called upon arrival of a message
on_message(m) {
console.log('message received');
console.log(m);
output.innerHTML += m.body + '<br />';
}
load(){
return new Promise(function(resolve,reject){
window.onload = () => {
// Fetch output panel
output = document.getElementById("output");
// Connect
client.connect(
self.mq_username,
self.mq_password,
self.on_connect,
self.on_connect_error,
self.mq_vhost
);
}
});
}
}
在我的 html 文件中,脚本标签的结构如下:
<script src="static/chat.bundle.js"></script>
<script>var chatRoom=new ChatRoom('soccer@newark');</script>
Webpack 构建成功,并且不抱怨聊天捆绑包的 es6 文件的语法,如上所示。
通常,像 webpack 这样的模块捆绑器不会公开模块局部变量。如果要将类ChatRoom
导出为公共 API,请在文件末尾添加module.exports
表达式
module.exports = ChatRoom;
注意 您可能希望使用
export default ChatRoom
而不是module.exports
。但请注意,Babel 从 6.0 版本开始导出默认在default
键下,而不是整个导出。有关详细信息,请参阅此问题和解答。
但这还不够。您还需要设置 Webpack 以从您的代码创建库。将以下内容添加到您的 webpack.config 中.js
output: {
library: 'ChatRoom',
libraryTarget: 'umd'
},
有关更多详细信息,请参阅 webpack 文档
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- 如何在用户输入时实例化数组
- 在requirejs中共享实例化对象
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- Angular重命名模块后未能实例化模块
- Backbone relational无法实例化两个RelationalModel对象
- 我应该如何用javascript实例化这个日期
- AngularJS出错-无法实例化模块
- 谷歌地图重叠MarkerSpiderfier实例化问题
- 未捕获错误:由于,[$injector:moduler]未能实例化模块polmgr
- ngRoute不是因果报应实例化的
- JavaScript 中的动态实例化
- 在文本框上绑定谷歌地点自动完成,而无需实例化谷歌地图
- 实例化 es6 类
- 如何实例化一个es6类,当它被webpack捆绑到一个函数中时
- 从变量实例化ES6类
- 在ES6 / ES2015中容易实例化子类数组
- 将ES6类存储在变量中,并通过Object.Create实例化
- 在node.js ES6中,是否可以传入一个类型然后实例化它?
- Js es6类的构造函数运行前先实例化构造函数