JavaScript让变量变成只读属性的几种方法

时间:2025-04-25 07:54:49
通过使用()函数将obj对象的pro1属性修改为不可写,这样,通过对象的属性形式实现了只读变量

defineProperty接收三个参数

  • object(必须有,操作的对象本身)
  • propertyname(必须有,属性名,添加修改属性得有的属性名)
  • descriptor(必须有,属性描述)

descriptor内配置可有可无,value默认undefind,其余默认为false

  • 设置属性的值:value
  • 是否可操作属性值:writable
  • 是否可修改配置:configurable如果值为false,descriptor内的属性不可操作
  • 是否可枚举:enumerable
var obj = {pro1: 1};
    Object.defineProperty(obj, "pro1", {writable: false});
    obj.pro1 = 2;
    console.log(obj.pro1);//控制台显示1
使用对象属性的访问特性
 var obj = {pro1: 1};
       Object.defineProperty(obj, "pro1", {
           get: function () {
               return 1;
           },
           set: function (newValue) {
               this.pro1 = 1
           }
       });

       obj.pro1 = 2;

       console.log(obj.pro1);//显示1
冻结对象
()函数在标准中的描述是“Prevents the modification of existing property attributes and values, and prevents the addition of new properties.”。即:阻止修改对象中现有属性的值和特性,并阻止添加新属性。这样,整个对象都成了只读的了,对象里面无论有多少属性,统统都变成只读的了。
var obj = {a: 1}
     Object.freeze(obj)
     obj.a = 2
     console.log(obj.a)
闭包

这里用了闭包的缓存功能,将匿名函数中的a变量缓存起来,间接实现了只读的功能。

var obj = (function () {
        var a = 1
        return function () {
            return a
        }
    })()
    console.log(obj())