ECMAScript 5 ने ऑब्जेक्ट के संशोधन को रोकने के लिए कई तरीके पेश किए हैं। वे निवारक उपाय यह सुनिश्चित करते हैं कि कोई भी, गलती से या अन्यथा वस्तु की कार्यक्षमता को बदल न दे।
निवारक विधियों के 3 स्तर हैं
1) एक्सटेंशन रोकें
इस स्तर पर, कोई भी नई संपत्ति या विधियों को नहीं जोड़ सकता है, लेकिन मौजूदा गुणों या विधियों तक पहुंच प्राप्त कर सकता है। यहां संबंधित वस्तु को हटाने की क्षमता है। Object.preventExtensions() इस कार्य को पूरा करने के लिए उपयोग की जाने वाली विधि है। यह किसी भी नए गुण को कभी भी वस्तु में जोड़े जाने से रोकता है।
उदाहरण
<html> <body> <script> var object1 = { prop1: 1 }; Object.preventExtensions(object1); delete object1.prop1 // value got deleted try { Object.defineProperty(object1, 'prop2', { value: 2 }); } catch (err) { document.write(err); } document.write("</br>"); document.write(object1.prop1); </script> </body> </html>
आउटपुट
TypeError: Cannot define property prop2, object is not extensible undefined // deleted so undefined
2) सील
यह एक्सटेंशन को रोकने के समान है, इसके अतिरिक्त यह मौजूदा गुणों या विधियों को हटाने की अनुमति नहीं देता है। इस कार्य को पूरा करने के लिए Object.seal() विधि का उपयोग किया जाता है।
उदाहरण
<html> <body> <script> var object1 = { prop1: 1 }; Object.seal(object1); object1.prop1 = 2; // value got changed delete object1.prop1; try { Object.defineProperty(object1, 'prop2', { value: 2 }); } catch (err) { document.write(err); } document.write("</br>"); document.write(object1.prop1); // it gives value as 2 because of seal. </script> </body> </html>
आउटपुट
TypeError: Cannot define property prop2, object is not extensible 2 // because of seal the value can't be deleated but got updated
3) फ़्रीज़ करें
सील की कार्यक्षमता के अलावा, फ्रीज मौजूदा संपत्तियों तक पहुंचने की भी अनुमति नहीं देता है। किसी वस्तु को स्थिर करने के लिए हम उपयोग करते हैं Object.freeze() तरीका। यह किसी वस्तु को अपरिवर्तनीय भी बना सकता है ।
उदाहरण
<html> <body> <script> var object1 = { prop1: 1 }; Object.freeze(object1); object1.prop1 = 2; // value got updated delete object1.prop1; // value got deleted try { Object.defineProperty(object1, 'prop2', { value: 2 }); } catch (err) { document.write(err); } document.write("</br>"); document.write(object1.prop1); // it gives 1 as output despite value updated to 2 </script> </body> </html>
आउटपुट
TypeError: Cannot define property prop2, object is not extensible 1 // because of freeze the value won't get delete and won't get update.