我想将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)
在WeakMap
课程中使用Xl
比使用此方法更好吗? (鉴于我的图书馆以IE 11 +为目标)
我熟悉在类构造函数中使用getter / setter的方法。但我不喜欢这种方法,因为它为每个新对象创建了新的函数实例。
答案 0 :(得分:1)
我是否违反任何最佳做法或在此处做坏事?
X1
的实施方式不再重要,因为您的图书馆用户不再看到它了。它不可能再利用它作为ES6 class
,例如能够继承它。导出的Xiuli
只是一个返回对象文字的工厂函数,这意味着instanceof
甚至不再有效。
我熟悉在类构造函数中使用getter / setter的方法。但我不喜欢这种方法,因为它为每个新对象创建了新的函数实例。
嗯,bind
确实创建了新的函数,它根本不是更好的,并且还有另外的对象文字作为实际实例的包装器。这是否需要比构造函数范围的getter更多的内存取决于私有“属性”的数量与公共方法的数量。工厂功能看起来并不容易使用,使用getter可能更干。