JavaScript:获取对象的评估属性

时间:2016-04-30 14:26:28

标签: javascript json object

我有两个类似的对象:

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实现?

1 个答案:

答案 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及更低版本等旧浏览器中无法使用。