JavaScript:获取对象的评估属性

JavaScript: Getting evaluated properties of an object

本文关键字:评估 属性 取对象 获取 JavaScript      更新时间:2023-09-26

我有两个类似的对象:

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更成熟的实现附带的库?

您可以使用对象文字中的正确语法使fullName成为"getter"属性。

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及更低版本)中不可用。