我正在寻找相当于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中执行此操作?
答案 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。