2016-04-30 15 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