2016-08-25 4 views
5

मेरे पास एक टाइपेडएरे सदस्य के साथ एक ऑब्जेक्ट है जो मैं सेट होने के बाद डेटा को संशोधित करने से रोकने के लिए जमा करना चाहता हूं। एक टाइपेडएरे को फ्रीज करने का प्रयास कर रहा है या इसके ऐरेबफर ने जैसा व्यवहार किया है, उतना व्यवहार नहीं किया था। मैं जानना चाहता हूं, जिज्ञासा से बाहर, यह इस तरह से व्यवहार क्यों करता है। मैं नोड 4.4.4 और क्रोम चला रहा हूं और यह वही कम या ज्यादा व्यवहार करता है।TypedArray और ArrayBuffers (नोड/क्रोम) पर ऑब्जेक्ट.फ्रीज़() अपेक्षित काम नहीं कर रहे हैं

var typedArray = new Uint32Array(4); 
typedArray[0] = 10; 
typedArray[1] = 20; 

Object.freeze(typedArray); 
// throws TypeError : Cannot freeze array buffer views with elements(...) 

अगले बात मैं कोशिश की है अंतर्निहित ArrayBuffer फ्रीज करने के लिए है

Object.freeze(typedArray.buffer); // Does not throws errors 
Object.isFrozen(typedArray.buffer); // returns true 

typedArray[0] = 50; // Successfully modifies the data, despite the buffer is frozen 

मुझे पता है कि मैं अपने डिजाइन बदल सकते हैं मूल बफर नहीं रखने के लिए, और डेटा के सदस्यों से यह फिर से संगठित एक बार मैं जरूरत है। लेकिन मैं इस व्यवहार के बारे में सिर्फ उत्सुक हूँ।

धन्यवाद

उत्तर

-1

Typed बफर मूल डेटा के रूप में आपने देखा पर संदर्भ की तरह है। टाइपेड बफर मूल बफर का एक टुकड़ा संदर्भित कर सकता है, और कई टाइप किए गए बफर मूल बफर के समान टुकड़े को संदर्भित कर सकते हैं। यह संभव है, उदाहरण के लिए subarray के साथ। यही कारण है कि ठंडा टाइप किया गया बफर मूल डेटा को बदलने से सुरक्षित नहीं कर सका। मूल बफर के स्लाइस के बारे में सभी डेटा स्टोर करना महंगा होगा जो जमे हुए थे और प्रत्येक परिवर्तन क्वेरी के दौरान चेक बनाते थे।

इसलिए, क्योंकि ठंडे टाइप किए गए बफर मानक के डिजाइनरों को संरक्षित करने की गारंटी नहीं देता है, टाइप किए गए बफर को ठंडा करने से मना कर दिया गया है। टाइप किए गए बफर को एक नोट के साथ जमे हुए जाने का एक और समाधान यह है कि यह डेटा संरक्षण की गारंटी नहीं देता है। वैकल्पिक कार्यान्वयन जमे हुए टाइप किए गए बफर प्रकार को केवल पढ़ने के लिए इंटरफ़ेस डेटा बना सकता है जिसे किसी अन्य टाइप किए गए बफर द्वारा बदला जा सकता है।

मानक के डिजाइनर ने Object.freeze दिनचर्या को लागू करने का सबसे आसान तरीका चुना है।

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