用于JavaScript的Python装饰器

时间:2014-06-11 23:04:48

标签: javascript python

我正在寻找相当于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 个答案:

答案 0 :(得分: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可以有一个制定者一样,Object.defineProperty也可以。您可以阅读documentation on MDN

来查看所有可能的选项