【发布时间】:2015-05-25 07:58:05
【问题描述】:
更新 2,添加要点:
问题:派生类可以有static get 方法吗?
3 files here,尝试在派生类中使用static get 方法。在类的.es6 文件中访问时它可以正常工作,但在导入测试时不能正常工作。
我只是对 ES6 类语法有所了解,但在 ES5 原型继承中我很强大/很舒服。我正在研究一组树数据结构。使用巴别塔。
我有一个派生类,RBTree: (见下面的代码)
我希望 RBTree 有一个 static get 方法,它只是用作指向我已经创建的空节点的指针/属性。假设我从另一个文件中导入了该节点,它被称为NULL_POINTER。
如何让这个静态 get 方法返回 NULL_POINTER?
当我导入它并尝试像上面这样访问时,.null 返回undefined。
我也尝试过在类表达式之外修改 RBTree (RBTree.nullPointer = //...),但不起作用。
更新 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 吗? (由于两个单独的exports?)
我想在 RBTree 对象上附加一些东西,以便 static get 可以工作,但我不希望它是 this 上的指针。
【问题讨论】:
-
您究竟是如何尝试访问它的,您确定
NULL_POINTER不是undefined?由于语法正确,NULL_POINTER没有您认为的值,或者您没有正确访问它,或者您的转译器(如果您使用一个)出错了。 -
我现在分别导出指针和RBTree,我可以访问它们,但我仍然无法让
static get _nil()函数工作。当我单步执行测试文件时,函数本身是undefined,我无法单步执行。这就是让我困惑的地方。 -
将文件放入小提琴中,用 cmets 分隔 3 个文件。我的问题的失败测试/示例在底部。
标签: ecmascript-6 ecmascript-harmony