JavaScript 防篡改對(duì)象的用法示例
javascript防篡改對(duì)象
這個(gè)東西吧,用到的很少,個(gè)人感覺用處不大,但是,可以作為裝逼的利器,哈哈,開搞。。
1、不可擴(kuò)展對(duì)象
默認(rèn)情況下對(duì)象都是可以擴(kuò)展的,也就是說,任何時(shí)候都可以向?qū)ο笾刑砑訉傩院头椒ā,F(xiàn)在使用Object.preventExtensions(object)方法可以改變這個(gè)行為,讓你不能再給對(duì)象添加屬性和方法。例如:
var person={name : 'jack'};
Object.preventExtensions(person);
person.age=13;
console.log(person.age);///undefine
雖然不能給對(duì)象添加新成員,但是已有的成員則絲毫不受影響,你仍然可以修改和刪除自己的已有的成員。另外使用isExtensible()方法還可以確定對(duì)象是否可以擴(kuò)展。例如:
var person={name : 'jack'};
alert(Object.isExtensible(person));//true
Object.preventExtensions(person);
alert(Object.istExtensible(person));//false
2、密封的對(duì)象
ECMAScript 5 為對(duì)象定義的第二個(gè)保護(hù)級(jí)別是密封對(duì)象。使用Object.seal(object)方法可以將對(duì)象改為密封對(duì)象。密封對(duì)象不可擴(kuò)展,而且已有成員的[[configurable]]特性將被設(shè)置為false。這就意味著不能刪除屬性和方法,因?yàn)椴荒苁褂肙bject.defineProperty()把數(shù)據(jù)修改為訪問其屬性,或者相反。但是屬性值是可以修改的。
var person = {name:'tom'};
Object.seal(person);
person.age=12;
console.log(person.age);//undefine
delete person.name;
console.log(person.name);//tom
person.name="jack";
alert(person.name);//jack
使用Object.isSealed()方法可以確定對(duì)象是否被密封了,因?yàn)楸幻芊獾膶?duì)象也是不可擴(kuò)展的,所以使用Object.istExtensible()檢測(cè)密封對(duì)象也會(huì)返回false(即不可擴(kuò)展)
var person = {name:'tom'};
alert(Object.isExtensible(person));///true,可擴(kuò)展
alert(Object.isSealed(person));////false,未加密
Object.seal(person);
alert(Object.isExtensible(person));///false,不可擴(kuò)展
alert(Object.isSealed(person));////true,已經(jīng)加密
3、凍結(jié)的對(duì)象
最嚴(yán)格的的防止篡改級(jí)別的是凍結(jié)對(duì)象,凍結(jié)的對(duì)象既不可擴(kuò)展,又是密封的,而且對(duì)象的數(shù)據(jù)屬性的[[Writable]]特性會(huì)被設(shè)置為false,如果定義set函數(shù),訪問器屬性仍然是可寫的,現(xiàn)在使用Object.freeze(object)方法可以將對(duì)象改為凍結(jié)的對(duì)象。
var person={name : 'tony'};
Object.freeze(person);
person.age=12;
alert(person.age);//undefine
delete person.name;
alert(person.name);//tony
person.name = 'jack';
alert(person.name);//tony
使用Object.isFrozen()方法可以檢測(cè)對(duì)象是否是凍結(jié)對(duì)象,因?yàn)閮鼋Y(jié)對(duì)象既是不可擴(kuò)展對(duì)象,又是密封的對(duì)象,所以用isExtensible()
和Object.istExtensible()檢測(cè)凍結(jié)對(duì)象將分別返回false和true,
var person = {name:'tom'};
alert(Object.isExtensible(person));///true,可擴(kuò)展
alert(Object.isSealed(person));////false,未加密
alert(Object.isFrozen(person));////false,未加密
Object.seal(person);
alert(Object.isExtensible(person));///false,不可擴(kuò)展
alert(Object.isSealed(person));////true,已經(jīng)加密
alert(Object.isFrozen(person));////true,已經(jīng)凍結(jié)
以上就是JavaScript 防篡改對(duì)象的用法示例的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 防篡改對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
獲取offsetTop和offsetLeft值的js代碼(兼容)
offsetTop和offsetLeft的值在某些特殊的情況下是會(huì)使用到的,為了實(shí)現(xiàn)值的準(zhǔn)確獲取,本文采用js代碼實(shí)現(xiàn)下,有需求的朋友可以參考下哈2013-04-04
JS獲取瀏覽器地址欄的多個(gè)參數(shù)值的任意值實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了JS獲取瀏覽器地址欄的多個(gè)參數(shù)值的任意值,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的的朋友參考下吧2018-07-07
Echarts折線圖設(shè)置線條顏色及線條以下代碼示例
最近項(xiàng)目需要,一直在使用Echarts視圖,現(xiàn)在遇到一個(gè)要修改echarts折線圖顏色的需求,下面這篇文章主要給大家介紹了關(guān)于Echarts折線圖設(shè)置線條顏色及線條以下區(qū)域漸變顏色的相關(guān)資料,需要的朋友可以參考下2024-02-02
js+css實(shí)現(xiàn)文字散開重組動(dòng)畫特效代碼分享
這篇文章主要介紹了js+css實(shí)現(xiàn)文字散開重組動(dòng)畫特效,需要的朋友可以參考下2015-08-08
用Div仿showModalDialog模式菜單的效果的代碼
用Div仿showModalDialog模式菜單的效果的代碼...2007-03-03
前端獲取資源的方式(ajax、fetch)以及其區(qū)別詳解
Fetch 被稱之為下一代 Ajax 技術(shù),內(nèi)部采用 Promise 方式處理數(shù)據(jù)API 語法簡(jiǎn)潔明了,這篇文章主要給大家介紹了關(guān)于前端獲取資源的方式(ajax、fetch)以及其區(qū)別的相關(guān)資料,需要的朋友可以參考下2024-07-07
JavaScript 實(shí)現(xiàn)頁面滾動(dòng)動(dòng)畫
這篇文章主要介紹了JavaScript 實(shí)現(xiàn)頁面滾動(dòng)動(dòng)畫的方法,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下2021-04-04
js實(shí)現(xiàn)select跳轉(zhuǎn)功能代碼
實(shí)現(xiàn)select跳轉(zhuǎn)的方法有很多,本例為大家介紹的是js實(shí)現(xiàn)的,通過location.href獲取跳轉(zhuǎn)地址,需要的朋友可以看看2014-10-10

