【发布时间】:2018-07-21 14:35:51
【问题描述】:
我想将Xl 类(一个 ES6 类)属性设为私有,从而防止直接操作这些属性。我选择使用如下的显示模块模式,
index.js
import Xl from './xiuli';
function Xiuli(selector) {
const xiuli = new Xl(selector);
return {
goto: xiuli.goto.bind(xiuli),
pre: xiuli.pre.bind(xiuli),
next: xiuli.next.bind(xiuli),
onTransitionend: xiuli.onTransitionend.bind(xiuli),
};
}
module.exports = Xiuli;
我是否违反了任何最佳做法或在这里做坏事?尤其是xiuli.<method>.bind(xiuli)
在Xl 类中使用WeakMap 是否比这种方法更好? (鉴于我的库面向 IE 11+)
我熟悉在类构造函数中使用 getter/setter 的方法。但我不喜欢这种方法,因为它会为每个新对象创建新的函数实例。
【问题讨论】:
-
这与 ES6 类有什么关系?只是好奇。
-
我的意思是,我在这里根本看不到使用 ES6 功能的痕迹。连模块语法都不是它
-
@oniondomes 我只是想指定
Xl是一个 ES6 类,因为我没有提供 Xl 类的源代码。我本可以使用export function Xiuli(selector){..},只是我的 eslint 抛出了Prefer default export. (import/prefer-default-export)警告。为什么我添加 es6-class 标签是因为我想隐藏 ES6 类的属性。 -
我不认为函数成为 ES6 类只是因为有人说它是。您可能应该听过您的 linter 并将其替换为
export default....;从我的角度来看,混合模块样式远非一个好主意。至于您的实际问题,很难说出您的目标到底是什么,因此在您的情况下该怎么做会更好。在您提供的示例代码中,我根本不明白您为什么需要Xl函数。 -
我的目标不是将函数转换为 ES6 类。我的目标是使用一些选择性方法返回一个对象,从而限制对下划线实例的直接操作。
标签: javascript design-patterns ecmascript-6 es6-class es6-modules