在預設情況下,所有物件都是可以擴充套件的,也就是說,無論什麼時候都可以向物件中新增屬性和方法。例如以下,先定義乙個物件,再向其新增乙個新屬性:
var obj =
obj.age =20;
console.
log(obj.age)
;//20
即使先定義好乙個物件,後面也可以向其新新增屬性和方法。
1.1 object.preventextensions()方法
現在使用object.preventextensions()
方法可以改變這個行為,這樣就不能向物件中新新增屬性和方法了,但是仍然可以修改(覆蓋)物件中原有的屬性和方法。
var obj =
object.
preventextensions
(obj)
;//阻止篡改物件
obj.age =20;
console.
log(obj.age)
;//undefined
//修改原有的屬性
obj.name =
"bob"
;console.
log(obj.name)
;//bob
可以發現,使用了object.preventextensions()
方法,就不能向物件中新新增屬性和方法了,但是可以修改物件原有的屬性和方法。
1.2 object.i***tensible()方法使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。
var obj =
console.
log(object.
i***tensible
(obj));
//true
object.
preventextensions
(obj)
;//阻止篡改物件
console.
log(object.
i***tensible
(obj));
//false
密封物件不可擴充套件,且其物件的屬性特性2.1 object.seal()方法:該方法用於密封物件。configurable
被設定為false
,意味著物件的屬性和方法不能通過delete
操作符刪除,但是仍然可以修改(覆蓋)物件中原有的屬性和方法。
var obj =
//密封物件
object.
seal
(obj)
;obj.age =20;
console.
log(obj.age)
;//undefined 不能新新增屬性
obj.name =
'jack'
delete obj.name;
console.
log(obj.name)
;//jack 不能刪除物件的屬性,但是物件的屬性仍然可以被修改
密封的物件不能新新增屬性、不能刪除屬性。擁有了不可擴充套件物件的特性。2.2 object.issealed()方法
該方法用於確定物件是否是密封物件,如果是密封物件返回true,相反返回false。
var obj =
console.
log(object.
i***tensible
(obj));
//true
console.
log(ojbect.
issealed
(obj));
//false
object.
seal
(obj)
;console.
log(object.
i***tensible
(obj));
//false
console.
log(ojbect.
issealed
(obj));
//true
保護物件的最高端防篡改就是凍結物件。凍結的物件,即是不可擴充套件的,也是密封的,而且其屬性的特性3.1 object.freeze()方法:該方法用於設定物件為凍結物件。writable
被設定為false
,也就是說屬性值也不能修改。
var obj =
object.
freeze
(obj)
;//凍結物件
obj.age =20;
console.
log(obj.age)
;//undefined 不可擴充套件
delete obj.name;
console.
log(obj.name)
;//tom 不可刪除
obj.name =
"jack"
;console.
log(obj.name)
;//tom 不可修改
凍結物件同時擁有了不可擴充套件物件、密封物件的特性。3.2 object.isfrozen()方法
該方法用於確定物件是否是凍結物件。如果是返回true,相反返回false。
var obj =
//未凍結之前
console.
log(oject.
i***tensible
(obj));
//true
console.
log(oject.
issealed
(obj));
//false
console.
log(oject.
isfrozen
(obj));
//false
//凍結物件之後
object.
freeze
(obj)
;//凍結物件
console.
log(oject.
i***tensible
(obj));
//false
console.
log(oject.
issealed
(obj));
//true
console.
log(oject.
isfrozen
(obj));
//true
總結:window.scatter=
object.
defineproperty
(window,
"scatter",)
;window.scatter=
'jack'
console.
log(window.scatter)
// 不可修改
我的個人部落格,有空來坐坐
js 防篡改物件
簡單介紹一下js的防篡改物件 1 不可擴充套件物件 不能新增,可以修改和刪除 預設情況下,所有物件都是可擴充套件的。即任何時候我們都可以為物件新增屬性和方法。但使用object.preventextensions 方法可以改變這一預設行為,即不能再為物件新增新的屬性和方法,但是仍然可以修改和刪除已有...
防篡改物件
答 不可擴充套件物件 object.preventextensions 這樣就不能向物件中新新增屬性和方法了 不可擴充套件量一級保護措施。判斷 object.i tensible 方法 使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。密封的物件 object.s...
JavaScript防篡改物件
任何人物件都可以被同一環境中執行的 修改。開發人員很可能會意外地修改別人的 甚至用不相容的功能重寫原生的 ecmascript解決了這個問題,可以讓開發人員防篡改物件。注意 一旦把物件定義為防篡改,就無法撤銷。1.不可擴充套件物件 在預設情況下,所有的物件都是可以擴充套件的。也就是說,任何時候都可以...