今天在读阿里开源的流程编排工具-iMove的源码,发现了如下代码:
get cells() {
return this.dsl.cells;
}
get nodes() {
return this.cells.filter((cell) => cell.shape !== 'edge');
}
get startNodes() {
return this.cells.filter((cell) => cell.shape === SHAPES.START);
}
get edges() {
return this.cells.filter((cell) => cell.shape === 'edge');
}
代码倒是好理解,这不是.net和Java里常见的属性吗?js还有这个功能?于是一探究竟,找到掘友的文章: #详解JavaScript的get和set方法。
PS:搜索了好几篇文章,掘友的质量最高,技术类的我已经倾向于看掘金的文章了。
掘友说的很详细,我就不再班门弄斧了,这里简单记录下注意事项:
- 这样声明可以理解为只有一个参数的函数语法糖,通过调用属性触发对应的函数,具体返回什么、传入值如何存储,是需要函数内部实现的,并不像.net有默认的属性;
- 通过这个特性,可以对数据获取进行重构,而不影响原有代码,比如之前通过this.nodes获取值,但现在需要对nodes的值进行筛选,可以像示例中包装为get nodes(),实现筛选逻辑,而不会改变调用方式this.nodes.