JavaScript 高等技能——“防改动对象”的注重要点

防改动对象

不可扩大对象

默许情况下,一切对象都是可扩大的:

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18

不可扩大能够运用这个要领: Object.preventExtensions(obj);

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18
Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined

严厉形式下会抛出毛病;

一旦设置防扩大, 对象就没法增加新的属性和要领。 已有的属性要领不受影响, 这些属性要领依然能够修正和删除。

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18
Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
person.name = "Oli";
console.log(person.name); //Oli

别的还能够经由过程运用Object.isExtensible()要领来肯定对象是不是可扩大

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18
Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
person.name = "Oli";
console.log(person.name); //Oli
console.log(Object.isExtensible(person)); //False

密封对象

密封对象能够运用要领: Object.seal(obj);

var person = {
    name: "Oliver"
};
Object.seal(person);
person.age = 18;
console.log(person.age); //undefined
person.name = "Oli";
console.log(person.name); //"Oli"
delete person.name;
console.log(person.name); //"Oli"

一旦设置密封对象, 不能够举行扩大, 已有属性和要领不能够删除, 然则属性值是能够修正的。

严厉形式尝试增加或删除对象成员会抛出毛病;

var person = {
    name: "Oliver"
};
Object.seal(person);
console.log(Object.isSealed(person)); //True
console.log(Object.isExtensible(person)); //False

凝结的对象

凝结对象能够运用要领: Object.freeze(obj);

一旦设置凝结对象, 既不能够扩大, 又是密封的, 只要经由过程接见器的set函数才能够修正属性值, 其他情况下不允许修正。

var person = {
    name: "Oliver"
};
Object.freeze(person);
person.name = "Oli";
console.log(person.name); //"Oliver"
person.age = 18;
console.log(person.age); //undefined
console.log(Object.isFrozen(person)); //True

检测是不是被凝结,用Object.isFrozen()要领

    原文作者:JS菌
    原文地址: https://segmentfault.com/a/1190000004518733
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞