測試:chrome
前言:ecmascript5中增加了指定物件的行為,在這之前我們先看看如何手動設定屬性的『configurable』、『writable』、『enumerable』、『value』、『get』、『set』—這些通過字面意思大家應該也能理解的,就不多說了,下面舉乙個例子:(要用到物件的.defineproperty()這個方法)
object.defineproperty(person,'name',)
alert(person.name)//zs
person.name = 'ls';
alert(person.name)//zs
var person = ;
1. preventextensions(不可擴充套件物件)
var person = ;
object.preventextensions(person);
//不能給person物件新增新屬性和方法了;
person.age = 29;
alert(person.age); //undefined
//但是你還可以對原來的屬性進行修改刪除;
person.name = 'ls'
alert(person.name)//ls
delete person.name
alert(person.name)//undefined
//使用i***tensible可以判斷物件是否可以擴充套件
alert(object.i***tensible(person))//false
2. seal(密封物件)
2.1. 密封物件不可擴充套件,而且已有成員的『configurable』被設定成了false,意味不能刪除屬性和方法,但可以修改的
var person = ;
object.seal(person);
person.age = 29;
alert(person.age); //undefined
person.name = 'ls'
alert(person.name)//ls
delete person.name
alert(person.name)//ls
alert(object.i***tensible(person))//false
//使用issealed可以判斷物件是否被密封了;
alert(object.issealed(person))//true;
3. freeze(凍結物件)
3.1. 凍結的物件既不可擴充套件,又是密封的,而且物件
資料屬性的 [[writable]] 特性會被設定為 false 。 如果定義 [[set]] 函式, 訪問器屬性仍然是可寫的。(後面這句在書上看的!!!)
var person = ;
object.freeze(person);
person.age = 29;
alert(person.age); //undefined
person.name = 'ls'
alert(person.name)//somjor
delete person.name
alert(person.name)//somjor
alert(object.i***tensible(person))//false
alert(object.issealed(person))//true
object.defineproperty(person,'_name',,
set:function
(newname)
})person._name='zhangsan';
alert(person.name)//cannot define property:_name, object is not extensible.
//不知道是不是我寫錯了還是怎麼,還是不能修改。如果把object.freeze(person)注釋掉就可以了。
//可以用 isfrozen判斷物件是否凍結;
alert(object.isfrozen(person))//true;
區別:preventextensions:不能擴充套件,但可以對原有的屬性進行修改,刪除;
seal:不能擴充套件,刪除,但可以對原有的屬性進行修改;
freeze:不能擴充套件,刪除,修改;
JavaScript防篡改物件
任何人物件都可以被同一環境中執行的 修改。開發人員很可能會意外地修改別人的 甚至用不相容的功能重寫原生的 ecmascript解決了這個問題,可以讓開發人員防篡改物件。注意 一旦把物件定義為防篡改,就無法撤銷。1.不可擴充套件物件 在預設情況下,所有的物件都是可以擴充套件的。也就是說,任何時候都可以...
防篡改物件
答 不可擴充套件物件 object.preventextensions 這樣就不能向物件中新新增屬性和方法了 不可擴充套件量一級保護措施。判斷 object.i tensible 方法 使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。密封的物件 object.s...
js 防篡改物件
簡單介紹一下js的防篡改物件 1 不可擴充套件物件 不能新增,可以修改和刪除 預設情況下,所有物件都是可擴充套件的。即任何時候我們都可以為物件新增屬性和方法。但使用object.preventextensions 方法可以改變這一預設行為,即不能再為物件新增新的屬性和方法,但是仍然可以修改和刪除已有...