Python装饰器用于JavaScript

4

我正在寻找JavaScript中与Python装饰器相当的东西(例如@property),但我不确定如何实现。

class Example:
    def __init__(self):
        self.count = 0
        self.counts = []
        for i in range(12):
            self.addCount()

    def addCount(self):
        self.counts.append(self.count)
        self.count += 1
    @property
    def evenCountList(self):
        return [x for x in self.counts if x % 2 == 0]


    example = Example()
    example.evenCountList # [0, 2, 4, 6, 8, 10]

我该如何在JavaScript中实现这个功能?

1个回答

4
显然,JavaScript中不存在这种确切的语法,但有一个方法可以实现类似的功能,那就是Object.defineProperty。基本上,该方法允许你为一个特定对象创建一个新属性,并且你可以定义getter方法来计算值。以下是一个简单的示例让你了解如何使用它。
var example = {
    'count': 10
};

Object.defineProperty(example, 'evenCountList', {
    'get': function () {
        var numbers = [];
        for (var number = 0; number < this.count; number++) {
            if(number % 2 === 0) {
                numbers.push(number);
            }
        }
        return numbers;
    }
});

就像@property可以有一个setter一样,Object.defineProperty也可以。您可以通过阅读MDN文档来检查所有可能的选项。


如果您希望更接近内联@property的方式,还可以使用get和set语法在声明对象文字时进行内联操作:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/get - slebetman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接