我真的很喜欢Ember.js中的计算属性。 node.js中最接近的计算属性实现是什么?
编辑: 本来应该更准确一点。余烬计算属性的酷特征是
所有这些导致对象定义更像是声明,功能代码很少,但包含很多功能。
答案 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.defineProperies
或Object.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;
}
});