JavaScript創(chuàng)建防篡改對象的方法分析
本文實例講述了JavaScript創(chuàng)建防篡改對象的方法。分享給大家供大家參考,具體如下:
之前的 JavaScript,開發(fā)人員可能會意外修改了別人的代碼,甚至重寫原生對象!現(xiàn)在,在 ECMAScript 5 中可以定義防篡改對象啦O(∩_∩)O~
不過,一旦把對象定義為防篡改之后,就無法撤銷了哦。
1 不可擴展對象
默認情況下,所有的對象都是可擴展的,即可以隨意地添加屬性和方法?,F(xiàn)在,使用 Object.preventExtensions(person)
方法后,對象就不可以擴展咯:
<script type="text/javascript"> var person = {name: "deniro"}; // person.age = 29; // console.log(person.age); console.log(Object.isExtensible(person));//true Object.preventExtensions(person); person.age = 15; console.log(person.age);//undefined console.log(Object.isExtensible(person));//false </script>
運行結(jié)果:
在非嚴格模式下,為對象添加新成員會靜默失??;而在嚴格模式下,會拋出錯誤。
雖然對象不能添加新成員,但仍然可以修改和刪除已有的成員。而 Object.isExtensible()
可以確定對象是否可擴展。
2 密封的對象
密封的對象不可以擴展,而且已有的成員的[[Configurable]]的特性也被設置為 false,這意味著不能刪除這個對象的屬性和方法咯,但屬性的值可以修改:
<script type="text/javascript"> var person = {name: "deniro"}; console.log(Object.isExtensible(person));//true console.log(Object.isSealed(person));//false Object.seal(person);//密封對象 console.log(Object.isExtensible(person));//false console.log(Object.isSealed(person));//true person.age = 29; console.log(person.age);//undefined delete person.name; console.log(person.name);//deniro </script>
運行結(jié)果:
跟不可擴展對象相似,在非嚴格模式下,刪除對象的已有成員會靜默失??;而在嚴格模式下,會拋出錯誤。
3 凍結(jié)的對象
對象的最嚴格的防篡改級別是凍結(jié)!凍結(jié)的對象既不能擴展,又是密封的,而且對象的數(shù)據(jù)屬性[[Writable]]被設置為 false,即屬性值無法被修改:
<script type="text/javascript"> var person = {name: "deniro"}; console.log(Object.isExtensible(person));//true console.log(Object.isSealed(person));//false console.log(Object.isFrozen(person));//false Object.freeze(person); console.log(Object.isExtensible(person));//false console.log(Object.isSealed(person));//true console.log(Object.isFrozen(person));//trueo person.age = 29; console.log(person.age);//undefined delete person.name; console.log(person.name);//deniro person.name = "lily"; console.log(person.name);//deniro </script>
運行結(jié)果:
對于 JavaScript 第三方庫的而言,凍結(jié)對象很有用,因為這些庫最怕被人意外修改了呀O(∩_∩)O~
感興趣的朋友還可以使用本站在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行結(jié)果。
更多關于JavaScript相關內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》
希望本文所述對大家JavaScript程序設計有所幫助。
相關文章
JavaScript 中如何實現(xiàn)并發(fā)控制
在日常開發(fā)過程中,你可能會遇到并發(fā)控制的場景,比如控制請求并發(fā)數(shù)。那么在 JavaScript 中如何實現(xiàn)并發(fā)控制呢?在回答這個問題之前,我們來簡單介紹一下并發(fā)控制。2021-05-05用javascript實現(xiàn)在小方框中瀏覽大圖的代碼
用javascript實現(xiàn)在小方框中瀏覽大圖的代碼...2007-08-08