在 JavaScript 中,Object.seal 方法用来封闭一个 对象,阻止添加新 属性 并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。
Object.seal(obj);
参数 | 描述 |
---|---|
obj | 将要被密封的对象。 |
被密封的对象。
通常,一个对象是可扩展的(可以添加新的属性)。密封一个对象会让这个对象变的不能添加新属性,且所有已有属性会变的不可配置。
属性不可配置的效果就是属性变的不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。但属性的值仍然可以修改。
尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出 TypeError(在严格模式中最常见的,但不唯一)。
不会影响从原型链上继承的属性。但 __proto__ ( )
属性的值也会不能修改。
使用 Object.seal 密封对象
<!DOCTYPE html>
<html>
<head>
<title>JavaScript Object.seal密封对象</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
function createPerson(name, age, sex){
var person = new Object();
person.name = name;
person.age = age;
person.sex = sex;
person.sayHi = function(){
console.log("I am", this.name, "i am", this.age, "years old", "and my sex is", this.sex);
}
return person;
}
var person = createPerson("HaiCoder", 109, "F");
person.sayHi();
Object.seal(person);
person.name = "haicoder";
person.sayHi();
person.score = 100;
console.log("Person score =", person.score);
delete person.name;
person.sayHi();
</script>
</head>
</html>
程序运行后,控制台输出如下:
我们首先,定义了一个 person 对象,接着,我们调用了 person 对象的 seal 方法,使 person 对象变成密封的。接着,我们修改了 person 对象的 name 属性,此时修改成功。
最后,我们给 person 对象增加了 score 属性,我们发现,增加失败,同时,我们使用了 delete 删除了 person 对象的 name 属性,同样,删除失败。
即,如果一个对象变成密封的,那么我们就不可以给对象增加和删除属性,但是我们可以修改对象属性的值。
在 JavaScript 中,Object.seal 方法用来封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。