如何禁止使用getter修改对象属性

How to prohibit modifying an object property with a getter

本文关键字:getter 修改 对象 属性 何禁止 禁止      更新时间:2023-09-26

如果我不允许写入对象属性,那么仅仅定义一个getter就足够了:

Object.defineProperty(fileNavigator, "isRoot", {
    get: function () {
        return this.currentPath.length === 0;
    }.bind(this)
});
var r = fileNavigator.isRoot;

//工作正常

fileNavigator.isRoot = 4;

//

TypeError: Cannot set property isRoot of #<Object> which has only a getter

这是预期的。我想知道是否应该这样做?

如果您希望每次获得它时都重新计算属性,这是您的情况,那么是的,您所做的一切都很好,除了.bind(this),这是不必要的和错误的(谢谢您@torazaburo)。如果您绝对想要绑定函数,则需要使用.bind(fileNavigator),否则this的值几乎肯定不会像预期的那样是fileNavigator

如果你希望属性是一个可读的常量,你不需要getter函数,因为它不需要计算任何东西。而是使用另一种属性描述符:

Object.defineProperty(obj, 'propertyName', {
    value: 'myValue',
    writable: false,
    enumerable: true,
    configurable: false
});