派生类可以使用静态get方法吗?

时间:2015-05-25 07:58:06

标签: ecmascript-6 ecmascript-harmony

更新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上的指针。

1 个答案:

答案 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;