JavaScript設置對象的不可拓展

通常來講,默認狀況下,對象都是可拓展的,咱們能夠爲其屬性進行增刪改等操做,也能夠更改他們原型的指向,如何讓一個對象變得不可拓展呢,咱們能夠使用ES5提供的幾個方法,來保證鎖定的對象是不可拓展的javascript

Object.preventExtensionsjava

Object.preventExtensions能夠鎖定對象,設置對象的不可拓展,能夠阻止爲對象添加新的屬性,非嚴格模式下會默默不起做用,可是嚴格模式下會報錯,能夠用Object.isExtensible判斷對象是否可拓展code

var person = {
  name: "cala"
};

Object.preventExtensions(person);

person.name = "John"; 
person.age = 24;
// 嚴格模式下會報錯: TypeError: Cannot add property age, object is not extensible

console.log(person) 
// {name: "John"}

Object.seal對象

Object.seal和上面的Object.preventExtensions方法做用是同樣,字面意思是密封,也是用來防止對象被拓展,另外還能夠阻止對象已有屬性和方法的刪除,能夠用Object.isSealed判斷對象是否可拓展ip

var person = {
  name: "cala"
};

Object.seal(person);

console.log(Object.isExtensible(person)); // false
console.log(Object.isSealed(person)); // true

delete person.name 
//  刪除屬性失敗 嚴格模式下 Uncaught TypeError: Cannot delete property 'name' of #<Object>

person.age = 30; // 
// 嚴格模式下會報錯: TypeError: Cannot add property age, object is not extensible

console.log(person) // {name: "cala"}

Object.freeze原型

做用與上述兩個方法大體相同,字面意思是冰凍,還能夠阻止對象的屬性和方法被修改,能夠用Object.isFrozen判斷對象是否可拓展io

var person = {
  name: "cala"
};

Object.freeze(person);

console.log(Object.isExtensible(person)); // false
console.log(Object.isSealed(person)); // true
console.log(Object.isFrozen(person)); // true

person.name = "xyz"; 
person.age = 30;     
delete person.name  
//上述三個操做,非嚴格模式不起做用,嚴格模式會報錯

console.log(person) // {name: "cala"}

總的來講,上述三個操做方法preventExtensions,seal,freeze能夠設置對象的不可拓展性,而且每一個方法都針對對象的不可拓展有着不一樣的限制,另外還有三個判斷方法,isExtensible,isSealed,isFrozen來對對象進行操做,返回Boolean值,來判斷對象是否可拓展console

相關文章
相關標籤/搜索