覆盖不可变.js实例的 getter 逻辑
Overwrite getter logic for an instance of Immutable.js
我正在使用不可变.js来管理配置对象,例如
config.js
export default Immutable.fromJS({
foo: 'FOO',
bar: {
// ...
}
});
我想覆盖 getter 函数,以便访问 undefined
属性会引发错误。
鉴于结果对象的每个 setter 方法都将创建一个不可变的新实例(实际上覆盖任何猴子修补),我该怎么做?
通常我
不希望它抛出错误,只需处理未定义而不会导致代码致命中断。要抛出特定的错误,我可能会使用 try/catch,但这效率非常低。
为了防止破损,我做了这样的事情。
我在这里的动机主要是我对未定义便便本身的调用 .get 非常困难,并且到处正确初始化会有所帮助,但不会捕获所有边缘情况。我只想要数据或未定义而没有任何破损。如果我希望它进行更改,特定类型检查会导致我稍后做更多工作。
这个更宽松的版本解决了比特定类型检查更多的边缘情况(大多数(如果不是全部)扩展类型可迭代,它有 .get,并且最终会获得所有数据)(通常只会在您尝试更新错误类型等时保存您)。
/* getValid: Checks for valid ImmutableJS type Iterable
returns valid Iterable, valid Iterable child data, or undefined
Iterable.isIterable(maybeIterable) && maybeIterable.get(['data', key], Map()), becomes
getValid(maybeIterable, ['data', key], Map())
But wait! There's more! As a result:
getValid(maybeIterable) returns the maybeIterable or undefined
and we can still say getValid(maybeIterable, null, Map()) returns the maybeIterable or Map() */
export const getValid = (maybeIterable, path, getInstead) =>
Iterable.isIterable(maybeIterable) && path
? ((typeof path === 'object' && maybeIterable.getIn(path, getInstead)) || maybeIterable.get(path, getInstead))
: Iterable.isIterable(maybeIterable) && maybeIterable || getInstead;
//Here is an untested version that a friend requested. It is slightly easier to grok.
export const getValid = (maybeIterable, path, getInstead) => {
if(valid(maybeIterable)) { // Check if it is valid
if(path) { // Check if it has a key
if(typeof path === 'object') { // Check if it is an 'array'
return maybeIterable.getIn(path, getInstead) // Get your stuff
} else {
maybeIterable.get(path, getInstead) // Get your stuff
}
} else {
return maybeIterable || getInstead; // No key? just return the valid Iterable
}
} else {
return undefined; // Not valid, return undefined, perhaps should return false here
}
}
只要给我我想要的东西,或者告诉我不。不要爆炸。我相信下划线也会做类似的事情。
相关文章:
- 困在逻辑中试图定位动态的东西
- 查看JS对象的所有键,甚至是getter定义的键
- Javascript逻辑运算符和字符串/数字
- "实例范围”;TypeScript类的getter/setter
- 这个条件语句的逻辑有问题
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- Redux应用程序结构-在哪里放置服务/业务逻辑
- JavaScript 中三元条件和逻辑和运算符的运算符优先级
- 用于验证JS中逻辑运算符表达式的正则表达式
- JavaScript中的逻辑OR(||)
- 显示引导弹出操作异常的逻辑
- 使用Ember的Web应用程序架构.动画逻辑应该放在哪里
- 逻辑和/或运算符-意外的最终结果
- 重写不带defineProperty的对象getter
- 如果在过去两个小时内没有记录,返回0,javascript逻辑
- 为更改的输入返回插入符号位置的逻辑
- 当DIV的高度低于某个数字时,隐藏DIV的正确逻辑是什么
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- 为什么在javascript函数声明中使用逻辑运算符
- 覆盖不可变.js实例的 getter 逻辑