node.js

时间:2016-01-08 19:07:46

标签: javascript node.js ember.js

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

编辑: 本来应该更准确一点。余烬计算属性的酷特征是

  • 简单语法
  • 解决comon模式的许多助手,例如Ember.computed.and()或Ember.computed.any()
  • 使用依赖属性时,只调用一次getter。然后缓存getter值,直到依赖属性发生更改。
  • 只有在访问属性时才会调用getter。

所有这些导致对象定义更像是声明,功能代码很少,但包含很多功能。

2 个答案:

答案 0 :(得分:3)

您可以使用标准的getter / setter(几乎在每个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

Ember和KnockoutJS之类的框架除了vanilla JS(所有Node.js都加上一些用于I / O之类的API)之外,还有它们处理依赖关系跟踪的能力。开箱即用的依赖跟踪不是开箱即用的。有一个Object.observe的提案允许依赖跟踪(你仍然需要自己做一些工作),但之后已从标准中删除,所以不打算使用它。

答案 1 :(得分:2)

查看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;
  }
});