我有两个类似的对象:
var person = {
fname: 'John',
lname: 'Doe'
};
var myObj = {
fullName: function () {
return person.fname + ' ' + person.lname;
}
};
我需要的是像这样的对象 - myObj
,但是评估了:
var someObj = {
fullName: 'John Doe'
};
由于myObj
将被传递给模板引擎,无论如何它都需要作为JSON,所以我找到了使用JSON.stringify
的方法:
function replacer(key, value) {
if (typeof value == 'function') {
return value.call();
}
return value;
}
var someObj = JSON.stringify(myObj, replacer);
虽然这有效,但我觉得它非常脆弱,我想对它进行一些研究。是否有replacer
等函数的特殊名称,是否有任何库具有更成熟的replacer
实现?
答案 0 :(得分:2)
您可以使用对象文字中的正确语法使fullName
成为"getter" property。
var person = {
fname: 'John',
lname: 'Doe',
// fullName will be evaluated on property access
get fullName() {
return this.fname + ' ' + this.lname;
}
};
document.querySelector("pre").textContent = JSON.stringify(person, null, 4);
<pre></pre>
这是ECMAScript 5的一项功能,因此在IE8及更低版本等旧浏览器中无法使用。