JavaScript創(chuàng)建防篡改對(duì)象的方法分析
本文實(shí)例講述了JavaScript創(chuàng)建防篡改對(duì)象的方法。分享給大家供大家參考,具體如下:
之前的 JavaScript,開發(fā)人員可能會(huì)意外修改了別人的代碼,甚至重寫原生對(duì)象!現(xiàn)在,在 ECMAScript 5 中可以定義防篡改對(duì)象啦O(∩_∩)O~
不過,一旦把對(duì)象定義為防篡改之后,就無(wú)法撤銷了哦。
1 不可擴(kuò)展對(duì)象
默認(rèn)情況下,所有的對(duì)象都是可擴(kuò)展的,即可以隨意地添加屬性和方法?,F(xiàn)在,使用 Object.preventExtensions(person)
方法后,對(duì)象就不可以擴(kuò)展咯:
<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>
運(yùn)行結(jié)果:
在非嚴(yán)格模式下,為對(duì)象添加新成員會(huì)靜默失??;而在嚴(yán)格模式下,會(huì)拋出錯(cuò)誤。
雖然對(duì)象不能添加新成員,但仍然可以修改和刪除已有的成員。而 Object.isExtensible()
可以確定對(duì)象是否可擴(kuò)展。
2 密封的對(duì)象
密封的對(duì)象不可以擴(kuò)展,而且已有的成員的[[Configurable]]的特性也被設(shè)置為 false,這意味著不能刪除這個(gè)對(duì)象的屬性和方法咯,但屬性的值可以修改:
<script type="text/javascript"> var person = {name: "deniro"}; console.log(Object.isExtensible(person));//true console.log(Object.isSealed(person));//false Object.seal(person);//密封對(duì)象 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>
運(yùn)行結(jié)果:
跟不可擴(kuò)展對(duì)象相似,在非嚴(yán)格模式下,刪除對(duì)象的已有成員會(huì)靜默失??;而在嚴(yán)格模式下,會(huì)拋出錯(cuò)誤。
3 凍結(jié)的對(duì)象
對(duì)象的最嚴(yán)格的防篡改級(jí)別是凍結(jié)!凍結(jié)的對(duì)象既不能擴(kuò)展,又是密封的,而且對(duì)象的數(shù)據(jù)屬性[[Writable]]被設(shè)置為 false,即屬性值無(wú)法被修改:
<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>
運(yùn)行結(jié)果:
對(duì)于 JavaScript 第三方庫(kù)的而言,凍結(jié)對(duì)象很有用,因?yàn)檫@些庫(kù)最怕被人意外修改了呀O(∩_∩)O~
感興趣的朋友還可以使用本站在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行結(jié)果。
更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JS實(shí)現(xiàn)模態(tài)框拖拽動(dòng)態(tài)效果
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)模態(tài)框拖拽動(dòng)態(tài)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07JS限定手機(jī)版中圖片大小隨分辨率自動(dòng)調(diào)整的方法
下面小編就為大家?guī)?lái)一篇JS限定手機(jī)版中圖片大小隨分辨率自動(dòng)調(diào)整的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-12-12JavaScript 中如何實(shí)現(xiàn)并發(fā)控制
在日常開發(fā)過程中,你可能會(huì)遇到并發(fā)控制的場(chǎng)景,比如控制請(qǐng)求并發(fā)數(shù)。那么在 JavaScript 中如何實(shí)現(xiàn)并發(fā)控制呢?在回答這個(gè)問題之前,我們來(lái)簡(jiǎn)單介紹一下并發(fā)控制。2021-05-05Bootstrap中定制LESS-顏色及導(dǎo)航條(推薦)
這篇文章主要介紹了Bootstrap中定制LESS-顏色及導(dǎo)航條的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11用javascript實(shí)現(xiàn)在小方框中瀏覽大圖的代碼
用javascript實(shí)現(xiàn)在小方框中瀏覽大圖的代碼...2007-08-08