是否可以创建一个不可编辑的JavaScript对象?

时间:2018-09-19 07:17:25

标签: javascript

例如,说我有他的职能:

var person = (function(){
    var age = "will"

    function shoutAge(){
        alert(age)
    }

    return {
        shoutAge
    }
})()

创建完成后,我可以做:

person.age = 45;

当然,这不是人的年龄范围,但这可能会引起混乱。

我将其更改为使用const

const person = (function(){
    var age = "will"

    function shoutAge(){
        alert(age)
    }

    return {
        shoutAge
    }
})()

但是我仍然可以添加自定义属性。

我误解了const的含义,您无法重新分配该变量,但可以为其添加属性。

但是有没有办法使它不可编辑,或者是出于某种原因不应该做的事情?

1 个答案:

答案 0 :(得分:5)

一种选择是在返回对象之前,先在对象上使用Object.freezewhich

  

防止添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性,还可以防止更改原型。

'use strict';
var person = (function() {
  var age = "will"

  function shoutAge() {
    console.log(age)
  }

  return Object.freeze({
    shoutAge
  })
})();
person.shoutAge();
person.foo = 'foo';