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

时间:2015-09-05 08:13:59

标签: javascript

如果我不允许写入对象属性就足以定义这样的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

预期。我想知道这是不是应该怎么做?

1 个答案:

答案 0 :(得分:2)

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

如果您希望该属性是可读的常量,则不需要getter函数,因为它不必计算任何内容。相反,您使用另一种属性描述符:

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