JavaScript中防篡改物件

2021-07-05 18:03:51 字數 2233 閱讀 6534

測試: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 方法可以改變這一預設行為,即不能再為物件新增新的屬性和方法,但是仍然可以修改和刪除已有...