es6 使用修饰器实现自动发布事件
使用修饰器实现自动发布事件
我们可以使用修饰器,使得对象的方法被调用时,自动发出一个事件。
const postal = require("postal/lib/postal.lodash");
export default function publish(topic, channel) {
const channelName = channel || '/';
const msgChannel = postal.channel(channelName);
msgChannel.subscribe(topic, v => {
console.log('频道: ', channelName);
console.log('事件: ', topic);
console.log('数据: ', v);
});
return function(target, name, descriptor) {
const fn = descriptor.value;
descriptor.value = function() {
let value = fn.apply(this, arguments);
msgChannel.publish(topic, value);
};
};
}
上面代码定义了一个名为publish
的修饰器,它通过改写descriptor.value
,使得原方法被调用时,会自动发出一个事件。它使用的事件“发布/订阅”库是Postal.js。
它的用法如下。
// index.js
import publish from './publish';
class FooComponent {
@publish('foo.some.message', 'component')
someMethod() {
return { my: 'data' };
}
@publish('foo.some.other')
anotherMethod() {
// ...
}
}
let foo = new FooComponent();
foo.someMethod();
foo.anotherMethod();
以后,只要调用ES6 someMethod
或者anotherMethod
,就会自动发出一个事件。
$ bash-node index.js
频道: component
事件: foo.some.message
数据: { my: 'data' }
频道: /
事件: foo.some.other
数据: undefined
es6 使用修饰器实现自动发布事件相关推荐
- es6 Trait修饰器
Trait修饰器 ES6 Trait 也是一种修饰器,效果与 Mixin 类似,但是提供更多功能,比如防止同名方法的冲突.排除混入某些方法.为混入的方法起别名等等. 下面采用traits-decora ...
- es6 使用修饰器实现Mixin模式
使用修饰器实现Mixin模式 在修饰器的基础上,可以实现Mixin模式.所谓Mixin模式,就是对象继承的一种替代方案,中文译为"混入"(mix in),意为在一个对象之中混入另外 ...
- es6 为什么修饰器不能用于函数
为什么修饰器不能用于函数 ES6 修饰器只能用于类和类的方法,不能用于函数,因为存在函数提升. var counter = 0; var add = function () { counter++; ...
- “睡服”面试官系列第二十三篇之修饰器(建议收藏学习)
目录 1. 类的修饰 2. 方法的修饰 3. 为什么修饰器不能用于函数? 4. core-decorators.js 4.1@autobind 4.2@readonly 4.3@override 4. ...
- ES6里的修饰器Decorator
修饰器(Decorator)是一个函数,用来修改类的行为. 一.概述 ES6 引入了这项功能,目前 Babel 转码器已经支持Decorator 首先,安装babel-core和babel-plugi ...
- ES6新特性之修饰器
修饰器(Decorator) 修饰器(Decorator)是一个函数, 用来修改类的行为. ES2017 引入了这项功能, 目前 Babel 转码器己经支持. 使用: <script>@T ...
- es6 Babel 转码器对修饰器的支持
Babel 转码器对修饰器的支持 目前,Babel 转码器已经支持 Decorator. 首先,安装babel-core和babel-plugin-transform-decorators.由于后者包 ...
- es6 方法的修饰器
方法的修饰器 修饰器不仅可以修饰类,还可以修饰类的属性. class Person { @readonly name() { return `${this.first} ${this.last}` } ...
- es6 Decorator类的修饰器
类的修饰器 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为.目前,有一个提案将这项功能,引入了 ECMAScript. @testable class MyTestableC ...
最新文章
- 《浪潮之巅》--百年帝国读后感
- python什么软件开发好_python怎样才能学好?python软件开发什么
- C语言非常大的数组,关于最大子数组问题
- 170329、用 Maven 部署 war 包到远程 Tomcat 服务器
- Google最热开源项目
- Docker : Error response from daemon: Get https://docker.elastic.co/v2/: net/http: TLS handshake time
- NHibernate 设置字段的默认值的办法
- android 素材标签,Android Studio矢量素材资源导入错误 – 不支持标签
- surf算子匹配物体
- VMAX数智化体系架构
- 【统计学】从样本到总体
- 推荐一款GIF动图制作软件--ScreenToGif
- ASP.NET入门篇【项目实战】打造一个自己的相册(二)登录模块
- SpringMvc中关于@ResponseBody和HashMap的用法
- 项目管理常用工具介绍:工作分解结构WBS
- LVS负载均衡之--DR模式
- 混合整数线性规划(MILP)
- 博通Broadcom SDK源码学习与开发7——HAL硬件抽象层分析
- day11 - 手写数字笔迹细化
- K8s容器的资源单位理解
热门文章
- python爬虫从入门到放弃(九)之 实例爬取上海高级人民法院网开庭公告数据
- 网络(8)-HTTP、Socket、TCP、UDP的区别和联系
- maven仓库启用国内云的方法,含完整配置文件
- C语言编程序编数独,求用C语言编一个解九宫格数独的程序怎么办? 爱问知识人...
- php权限设置,php设置权限的方法
- linux mysql 乱码怎么解决_MySQL_linux中解决mysql中文乱码方法,改默认编码:/etc/init.d/my - phpStudy...
- Spring框架的快速入门
- spring配置日志
- GCC同时使用静态库和动态库链接
- java8的日期API总结(JSR310)