2014-06-11 73 views
4

我正在寻找相当于JavaScript的Python装饰器(即@property),但我不知道该怎么做。JavaScript的Python装饰器

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呢?

回答

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来检查所有可能的选项。

+0

还有get和set语法可以在声明对象字面值时进行内联,如果您希望它更接近内联的@property:https://developer.mozilla.org/en-US/docs/Web/的JavaScript /参考/运营/获取 – slebetman