如果我不允许写入对象属性就足以定义这样的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
预期。我想知道这是不是应该怎么做?
答案 0 :(得分:2)
如果你希望每次获得属性时重新计算属性,这是你的情况,那么是的,你所做的就好了,除了.bind(this)
这是不必要的和错误(谢谢@torazaburo)。如果您绝对想要绑定该函数,则需要使用.bind(fileNavigator)
,否则this
的值几乎肯定不会像预期的那样fileNavigator
。
如果您希望该属性是可读的常量,则不需要getter函数,因为它不必计算任何内容。相反,您使用另一种属性描述符:
Object.defineProperty(obj, 'propertyName', {
value: 'myValue',
writable: false,
enumerable: true,
configurable: false
});