1、不可擴充套件物件
預設情況下物件都是可以擴充套件的,也就是說,任何時候都可以向物件中新增屬性和方法。現在使用object.preventextensions(object)方法可以改變這個行為,讓你不能再給物件新增屬性和方法。例如:
var person=;
object.preventextensions(person);
person.age=13;
console.log(person.age);///undefine
雖然不能給物件新增新成員,但是已有的成員則絲毫不受影響,你仍然可以修改和刪除自己的已有的成員。另外使用i***tensible()方法還可以確定物件是否可以擴充套件。例如:
var person=;
alert(object.i***tensible(person));//true
object.preventextensions(person);
alert(object.istextensible(person));//false
2、密封的物件
ecmascript 5 為物件定義的第二個保護級別是密封物件。使用object.seal(object)方法可以將物件改為密封物件。密封物件不可擴充套件,而且已有成員的[[configurable]]特性將被設定為false。這就意味著不能刪除屬性和方法,因為不能使用object.defineproperty()把資料修改為訪問其屬性,或者相反。但是屬性值是可以修改的。
var person = ;
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()方法可以確定物件是否被密封了,因為被密封的物件也是不可擴充套件的,所以使用object.istextensible()檢測密封物件也會返回false(即不可擴充套件)
var person = ;
alert(object.i***tensible(person));///true,可擴充套件
alert(object.issealed(person));false,未加密
object.seal(person);
alert(object.i***tensible(person));///false,不可擴充套件
alert(object.issealed(person));true,已經加密
3、凍結的物件
最嚴格的的防止篡改級別的是凍結物件,凍結的物件既不可擴充套件,又是密封的,而且物件的資料屬性的[[writable]]特性會被設定為false,如果定義set函式,訪問器屬性仍然是可寫的,現在使用object.freeze(object)方法可以將物件改為凍結的物件。
var person=;
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()方法可以檢測物件是否是凍結物件,因為凍結物件既是不可擴充套件物件,又是密封的物件,所以用i***tensible()
和object.istextensible()檢測凍結物件將分別返回false和true,
var person = ;
alert(object.i***tensible(person));///true,可擴充套件
alert(object.issealed(person));false,未加密
alert(object.isfrozen(person));false,未加密
object.seal(person);
alert(object.i***tensible(person));///false,不可擴充套件
alert(object.issealed(person));true,已經加密
alert(object.isfrozen(person));true,已經凍結
JavaScript防篡改物件
任何人物件都可以被同一環境中執行的 修改。開發人員很可能會意外地修改別人的 甚至用不相容的功能重寫原生的 ecmascript解決了這個問題,可以讓開發人員防篡改物件。注意 一旦把物件定義為防篡改,就無法撤銷。1.不可擴充套件物件 在預設情況下,所有的物件都是可以擴充套件的。也就是說,任何時候都可以...
JavaScript中防篡改物件
測試 chrome 前言 ecmascript5中增加了指定物件的行為,在這之前我們先看看如何手動設定屬性的 configurable writable enumerable value get set 這些通過字面意思大家應該也能理解的,就不多說了,下面舉乙個例子 要用到物件的.definepro...
javascript函式防抖
函式防抖是頻繁發生的情況下,當有足夠的空閒時間,才會執行 一次,是優化高頻率執行 的一種手段。實際開發中會遇到頻發觸發事件的情況,比如resize,scroll,mousemove事件。事件觸發 n 秒後執行,如果在這 n 秒內再次觸發,則以新的事件時間為準,n 秒後執行。無論觸發多少次,都要等到最...