如何禁止使用getter修改对象属性
How to prohibit modifying an object property with a getter
如果我不允许写入对象属性,那么仅仅定义一个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
});
相关文章:
- 在Safari执行javascript之前对其进行修改
- 查看JS对象的所有键,甚至是getter定义的键
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 用Javascript修改内部标记的CSS规则
- "实例范围”;TypeScript类的getter/setter
- 绑定Range输入以修改样式
- 可以从Chrome扩展修改窗口对象吗
- jQuery滚动器插件修改
- 将函数从onclick修改为onload
- jQuery UI自动完成-修改问题
- Javascript日期修改
- 如何通过JQuery修改样式属性
- 使用treewalker修改表
- Angularjs:修改js中的作用域,稍后在页面中使用
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 修改控制器AngularJS的全局值
- 修改数据后,setState不会触发重新渲染
- 如何修改由对象getter返回的私有变量?
- 如何禁止使用getter修改对象属性
- 使用<%=getter%>在aspx文件中,不能修改控件集合,因为控件包含代码块