2016-04-30 105 views
0

我有两个目标与此类似:的JavaScript:入门评估对象的属性

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

回答

2

您可以在对象文字中使用正确的语法使fullName a "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和更低。

+1

真的很酷,不知道这个,谢谢。 – Sven

+0

不客气。 – 2016-04-30 15:09:40