2012-09-18 15 views
10

ऐसा लगता है कि अंडरस्कोर लाइब्रेरी जेएसओएन में प्रथम श्रेणी के नागरिकों के रूप में कार्यों का इलाज नहीं करेगी। यह बेवकूफ क्यों काम नहीं करता है?अंडरस्कोर जेएस विधि का विस्तार

http://jsfiddle.net/anV28/

var a = { 'f1': function(){var s='success';} }; 
var b = {'foo' : 'bar'}; 
var c = _.extend(b, a); 
alert(JSON.stringify(c)); 

var d = _.extend({name : 'moe'}, {age : 50}); 
alert(JSON.stringify(d)); 

नहीं c सही मूल्य क्यों है?

d सही मानते हैं यदि हम केवल चाबियाँ और मानों के रूप में स्ट्रिंग का उपयोग करते हैं।

मैं इस सीमा के आसपास कैसे हो सकता हूं?

+0

यह प्रश्न मुझे जॉन रेसिग से फिर से [उत्तर] (http://stackoverflow.com/questions/122102/most- कुशल-way-to-clone-an-object) याद रखने देता है। – haudoing

उत्तर

11

c सही मूल्य है:

{ 
    f1: function() {var s='success';}, 
    foo: "bar" 
} 

आपकी समस्या यह है कि आप JSON.stringify का उपयोग कर रहे alert के लिए तार का उत्पादन होता है, वहाँ JSON में एक समारोह का कोई प्रतिनिधित्व नहीं है, इसलिए JSON.stringify(c)f1 बाहर छोड़ देता है। आप अपने परिणामों को देखने के लिए console.log का उपयोग करते हैं तो आप बेहतर भाग्य होगा: http://jsfiddle.net/ambiguous/7j7hu/

एक के रूप में अलग रूप में, आपको लगता है कि _.extend इस तरह का उपयोग कर ध्यान में रखना चाहिए:

var c = _.extend(b, a); 

भी b को संशोधित करेगा और नहीं हो सकता है कि अपना इरादा बनो

+1

बिल्कुल सही। धन्यवाद! मैं कभी नहीं जानता था कि JSON.stringify के साथ समस्या थी – sat

संबंधित मुद्दे