欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript創(chuàng)建防篡改對(duì)象的方法分析

 更新時(shí)間:2018年12月30日 14:34:02   作者:deniro_li  
這篇文章主要介紹了JavaScript創(chuàng)建防篡改對(duì)象的方法,結(jié)合具體實(shí)例形式分析了javascript基于不可擴(kuò)展對(duì)象、密封的對(duì)象和凍結(jié)的對(duì)象實(shí)現(xiàn)防篡改對(duì)象的相關(guān)操作技巧,需要的朋友可以參考下

本文實(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)文章

最新評(píng)論