node.js中的计算属性

Computed Properties in node.js

本文关键字:计算 属性 js node      更新时间:2023-09-26

我真的爱上了Ember.js中的计算属性。node.js中最接近的计算属性实现是什么?

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

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

所有这些都产生了更像声明的对象定义,其中几乎没有函数代码,但包含大量功能。

您可以使用标准的getters/ssetter(几乎在每个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等框架与香草JS(这是Node.JS的全部功能,加上一些I/O等API)不同的地方在于它们处理依赖性跟踪的能力。依赖项跟踪不是现成的。有一个关于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;
  }
});