簡體   English   中英

node.js中的計算屬性

[英]Computed Properties in node.js

我真的很喜歡Ember.js中的計算屬性。 在node.js中最接近的計算屬性實現是什么?

編輯:應該更精確一些。 余燼計算屬性的很酷的功能是

  • 簡單語法
  • 解決通用模式的許多幫助器,例如Ember.computed.and()或Ember.computed.any()
  • 使用依賴屬性時,getter僅被調用一次。 然后將getter值緩存,直到相關屬性更改為止。
  • 只有在訪問屬性時才調用getter。

所有這些都會導致對象定義更像聲明,功能代碼很少,但包含很多功能。

您可以使用標准的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之類的框架與普通JS(這是Node.js所擁有的,再加上一些用於I / O之類的API)區別開來的原因在於它們處理依賴關系跟蹤的能力。 沒有立即提供依賴項跟蹤。 有一個Object.observe提案,該提案允許進行依賴項跟蹤(您仍然需要自己做一些工作),但此后已從標准中刪除,因此不打算使用它。

看一下Object.defineProperiesObject.definePropery 它們將允許您為對象的屬性定義獲取器和設置器。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM