node.js中的计算属性

我真的开始喜欢Ember.js中的计算属性。 在node.js中最接近实现的计算属性是什么?

编辑:应该是更精确一点。 在余烬计算属性的酷function是

  • 简单的语法
  • 许多解决comon模式的助手,例如Ember.computed.and()或者Ember.computed.any()
  • 只有在使用相关属性时才会调用getter。 getter值然后被caching直到依赖属性改变。
  • 只有在访问属性时才会调用getter。

所有这些都导致对象定义更像声明,只有很less的function代码,但包含很多function。

你可以使用标准的getters / setters(几乎每个JS环境都可以使用)。

var person = { firstName: 'Mike', lastName: 'C', get fullName() { return this.firstName + ' ' + this.lastName; }, set fullName(val) { var valArray = val.split(/\s/); this.firstName = valArray[0]; this.lastName = valArray[1]; return val; } }; console.log(person.fullName); // Mike C person.lastName = 'Myers'; console.log(person.fullName); // Mike Myers person.fullName = 'John Doe'; console.log(person.firstName); // John 

除了香草JS(这是所有的Node.js加上一些类似I / O的API)之外,Ember和KnockoutJS等框架的设置是它们处理依赖关系跟踪的能力。 不提供依赖关系跟踪function。 有一个关于Object.observe的提议,它允许进行依赖关系跟踪(你自己也需要做一些工作),但是现在已经被从标准中删除了,因此不打算使用它。

看看Object.defineProperiesObject.definePropery 。 他们将允许你为一个对象的属性定义一个getter和setter。

 var person = { first: 'John', last: 'Doe' }; Object.defineProperty(person, 'fullName', { get: function(){ return this.first + ' ' + this.last }, set: function(val){ var pair = val.split(/\s/); this.first = pair[0]; this.last = pair[1]; return val; } });