2012-02-02 11 views
13

मैं ऑब्जेक्ट.फ्रीज़ का उपयोग अपने स्वयं के नियमों को तोड़ने से रोकने के साधन के रूप में करता हूं। जब मैं खराब कार्य करने की कोशिश करता हूं तो मुझे ऑब्जेक्ट.फ्रीज़ मुझसे बात करना चाहूंगा। हालांकि, Object.freeze बस असाइनमेंट चुपचाप विफल करता है! उदाहरण के लिए, यदि मैंक्या "ऑब्जेक्ट.फ्रोज़न" ऑब्जेक्ट को बदलने के लिए कोई प्रयास करने पर कोई चेतावनी फेंकने का कोई तरीका है?

/* 
* Frozen singleton object "foo". 
*/ 
var foo = (function() { 
    var me = {}; 

    me.bar = 1; 

    if (Object.freeze) { 
    Object.freeze(me); 
    } 

    return me; 
})(); 

foo.bar = 2; 
console.log(foo.bar); 

कंसोल "1" लॉग करेगा, लेकिन मुझे नहीं पता होगा कि मैंने कभी भी एक खराब असाइनमेंट किया है। यह निश्चित रूप से मेरे कोड में खतरनाक अप्रत्याशित व्यवहार का कारण बन सकता है, जब वस्तु को ठंडा करने का पूरा बिंदु अप्रत्याशित से बचने के लिए था। वास्तव में, मुझे ऑब्जेक्ट को फ्रीज करने, खराब असाइनमेंट करने और खराब कोड के कारण बाद में मेरा कोड विफल होने के कारण वर्बोज़ त्रुटि आउटपुट प्राप्त करने की अधिक संभावना है।

मुझे आश्चर्य है कि जावास्क्रिप्ट में किसी भी ब्राउज़र में कोई छिपी हुई "अपरिवर्तनीय वस्तु चेतावनी" प्रगति है, ताकि जब मैं "ऑब्जेक्ट.फ्रोजन" ऑब्जेक्ट को म्यूटेट करने का प्रयास करूं तो मुझे पता चलेगा।

+0

यह IE8 और नीचे, और संभवतः कुछ अन्य ब्राउज़रों में समर्थित नहीं है। मुझे लगता है कि आप केवल परेशानी की तलाश में हैं। कम से कम, सभी ब्राउज़रों का परीक्षण करें। –

+0

@ हैरी, मैं ऑब्जेक्ट.फ्रीज़ का उपयोग किसी भी तरह से नहीं कर रहा हूं जो मेरे प्रोग्राम के प्रवाह को बदलता है। मैं केवल इसे अपने लिए एक सुरक्षा उपकरण के रूप में उपयोग करना चाहता हूं। मैं असमर्थित फ़ंक्शन पर ** निर्भर ** की हिम्मत नहीं करूंगा! – Milosz

उत्तर

18

एक अयोग्य संपत्ति (ECMA-262: 11.13.1) को असाइन करने का प्रयास करते समय सख्त मोड में कोड TypeError फेंक देगा। लेकिन ध्यान दें कि आप ब्राउज़र में फेंकने वाली त्रुटि पर भरोसा नहीं कर सकते हैं जो ईएस 5 सख्त मोड (जैसे आईई 9) का पूरी तरह से समर्थन नहीं करता है।

अपना कोड सख्त मोड में चलाने के लिए, जेएस फ़ाइल की शुरुआत में 'use strict'; जोड़ें या कोड युक्त फ़ंक्शन जोड़ें और इसे उस वातावरण में चलाएं जो सख्त मोड लागू करता है (उदाहरण के लिए यह सूची देखें: http://caniuse.com/#feat=use-strict)।

+0

यह वही है जो मैं ढूंढ रहा था। सफारी लॉग इन करेगा 'TypeError: केवल पढ़ने योग्य संपत्ति को असाइन करने का प्रयास किया गया।' जब मैं एक बुरा असाइनमेंट करने का प्रयास करता हूं। बेशक, मैं अपवाद के लिए विश्वसनीय समर्थन की कमी के कारण 'try {} catch() {}' ब्लॉक में इसका उपयोग नहीं करूँगा; यह केवल मेरे लिए एक कोडिंग सुरक्षा उपकरण है। बहुत धन्यवाद! – Milosz

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

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