JavaScript freeze方法

JavaScript freeze方法教程

JavaScript 中,Object.freeze 方法用来冻结一个 对象,一个被冻结的对象再也不能被修改。冻结了一个对象则不能向这个对象添加新的 属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。

此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回 和传入的 参数 相同的对象。

JavaScript freeze详解

语法

Object.freeze(obj);

参数

参数 描述
obj 要被冻结的对象。

返回值

被冻结的对象。

说明

被冻结对象自身的所有属性都不可能以任何方式被修改。任何修改尝试都会失败,无论是静默地还是通过抛出TypeError 异常(最常见但不仅限于strict mode)。

数据属性的值不可更改,访问器属性(有 getter 和 setter)也同样(但由于是函数调用,给人的错觉是还是可以修改这个属性)。如果一个属性的值是个对象,则这个对象中的属性是可以修改的,除非它也是个冻结对象。数组作为一种对象,被冻结,其元素不能被修改。没有数组元素可以被添加或移除。

这个方法返回传递的对象,而不是创建一个被冻结的副本。

案例

Object.freeze冻结对象

使用 Object.freeze 冻结对象

<!DOCTYPE html> <html> <head> <title>JavaScript Object.freeze冻结对象</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.name = "haicoder"; person.sayHi(); Object.freeze(person); person.name = "HaiCoder"; delete person.age; person.sayHi(); </script> </head> </html>

程序运行后,控制台输出如下:

15_JavaScript Object freeze.png

我们创建了一个 person 对象,接着,我们在修改了 person 对象的 name 属性的值,并调用 sayHi 方法,此时我们发现,修改 name 属性成功。

接着,我们调用了对象的 freeze 方法,将 person 对象进行冻结,我们再次尝试修改 person 对象的 name 属性和使用 delete 删除 person 对象的 age 属性。

最后,我们再次调用 sayHi 方法,此时我们发现,修改 name 属性和删除 age 属性都失败了,因为,此时的对象时候被冻结的,不能做任何修改。

JavaScript freeze方法总结

在 JavaScript 中,Object.freeze 方法用来冻结一个对象,一个被冻结的对象再也不能被修改。