首页 > 解决方案 > 如何模拟 AngularJs 装饰器在 vanilla Javascript (ES6) 中所做的事情?

问题描述

AngularJs 装饰器提供了一种在服务中扩展功能而不影响原始服务的有效方法。如何用 javascript 类模拟这种行为?

我有 2 个图书馆。一个包含通用逻辑和 UI 元素,另一个更具体到我正在构建的页面。我必须扩展在我的特定库中包含核心逻辑的库中编写的类,然后使用核心库中扩展版本的功能。我确实理解这可能看起来像是一个错误的设计,但是使用 AngularJS 中的装饰器可以实现同样的效果。但是,我使用的是普通的 ES6 类。那么我该怎么做呢?

标签: javascriptangularjses6-class

解决方案


相当愚蠢的例子:

class A {foo() {console.log(1)}}
var a  = new A();
// super decorate
var t  = a.foo; a.foo = () => { console.log(2); t()}
// awesome result:
a.foo()
>> 2
>> 1

推荐阅读