不可擴充套件物件 密封物件 凍結物件

2021-09-25 15:11:08 字數 1298 閱讀 7537

不可擴充套件物件 object.preventextensions

不可新增新屬性

let obj =

object.

preventextensions

(obj)

obj.c =

1 obj //

// object.i***tensible檢測是否可擴充套件

console.

log(object.

i***tensible

(obj));

// false

密封物件 object.seal

密封物件不可擴充套件,而且已有的屬性成員[[configurable]]特性將被設定成false(意味著不能刪除屬性和方法,但是可修改已有屬性值)

let obj =

;// 密封

object.

seal

(obj)

;// 刪除

delete obj.a // false

// 可以刪引用型別的屬性

delete obj.b[1]

// true.

obj.b //

obj.b[1]

// undefined

obj.a =

'c'

obj.a // c

// 檢視描述, 可以看到configurable為false

object.

getownpropertydescriptors

(obj)

//a:

//b:

凍結物件 object.freeze

最嚴格的防止篡改級別是凍結物件,凍結的物件既不可以擴充套件,又是密封的,而且物件資料屬性的[[writable]]特性會被設定為false。 如果定義[[set]]函式,訪問器屬性仍然是可寫的

let obj =

object.

freeze

(obj)

;// 不可修改

obj.a =

'c' obj.a // 'a'

// 不可刪除

delete obj.a // false

// 不可新增

obj.c =

1// 檢視描述, 可以看到configurable為false, writable也為 false

object.

getownpropertydescriptors

(obj)

// a:

// b:

不可擴充套件物件

預設情況下,所有物件都是可以擴充套件的。也就是說,任何時候都可以向物件中新增屬性和方法。例如,可以像下面這樣先定義乙個物件,後來再給它新增乙個屬性。var person person.age 29 即使第一行 已經完整定義 person 物件,但第二行 仍然能給它新增屬性。現在,使用 object....

WPF優化 Freezable凍結物件

wpf 雖然很美觀,效果很炫,但是對資源的消耗也很大,尤其是初次接觸wpf 的人,因為很多地方雖然實現了想要的效果,但是由於經驗問題,所以也會造成很大的資源浪費,好的程式,需要更好的優化 雖然可能只是節省了很少的一點資源,但是對整體程式執行的速度與穩定性來說,也許就起到了決定性的作用 每個地方都能做...

js防篡改物件之凍結物件

const person object.defineproperty person,job set function newvalue console.log object.isfrozen person false 使用object.freeze 將物件修改為凍結物件,凍結物件即無法擴充套件,又是...