更新2,添加了Gist :
问题:派生类可以使用static get
方法吗?
3 files here,在派生类中尝试使用static get
方法。在课堂内访问时它可以正常工作。 .es6
文件,但在导入测试时没有。
我只是深入了解ES6类语法,但在ES5原型继承方面非常强大/舒适。我正在处理一组树数据结构。使用巴别塔。
我有一个派生类,RBTree: (见下面的代码)
我希望RBTree有一个static get
方法,它只是作为我已经创建的空节点的指针/属性。假设我已经从另一个文件导入了该节点,它被称为NULL_POINTER
。
如何让这个静态get方法返回NULL_POINTER
?
当我导入它并尝试如上所述进行访问时,.null
会返回undefined
。
我也尝试在类表达式(RBTree.nullPointer =
// ...)之外修改RBTree,但这不起作用。
更新1 :
重命名了一些东西。代码已更新以反映命名。
我有一个原始测试峰值的工作实现。以下是相关文件:
RBTree.es6
import {NULL_POINTER} from 'file/with/null/pointer'
export const _NULL_SENTINEL = new RBNode()// constructs the null node
export class RBTree extends BST {
constructor() {
//...super call
}
//...
static get _nil() {
return _NULL_SENTINEL;
}
}
在我的Jest测试文件中:
const RBTree = require('../../../src/binary_trees/RBTree');
const RBNode = require('../../../src/binary_trees/RBNode');
当我使用node-inspector逐步完成测试时:
1.在RBTree.es6的底部,RBTree._nil正常工作
2.如果我在测试文件中的行后面放置一个调试器,RBTree._nil将返回undefined
3. RBTree._NULL_SENTINEL是同一个对象。
1和3正在按预期工作
背后的原因2,RBTree的static get
功能是在不同的范围内运行而不再能够访问_NULL_SENTINEL
? (由于两个单独的export
s?)
我想在RBTree对象上添加一些内容,以便static get
能够正常工作,但我不希望它成为this
上的指针。
答案 0 :(得分:1)
您没有正确导入类。由于您使用的是名为的导出,因此必须使用命名的导入。通过RBTree._NULL_SENTINEL
可以看到,所有导出都成为模块的属性。 (为什么_NULL_SENTINEL
会成为类RBTree
的静态属性?您永远不会将其分配给RBTree
)
使用ES6,它将是
import {RBTree} from '../../../src/binary_trees/RBTree';
和CommonJS:
const RBTree = require('../../../src/binary_trees/RBTree').RBTree;