gpt4 book ai didi

javascript - 使用显示模式将 ES6 类属性设为私有(private)

转载 作者:行者123 更新时间:2023-11-30 20:45:38 25 4
gpt4 key购买 nike

我想制作Xl类(ES6 类)属性私有(private),从而防止直接操作属性。我选择使用显示模块模式如下,

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)

是否使用 WeakMapXl类比这种方法好吗? (鉴于我的图书馆是针对 IE 11+)

我熟悉在类构造函数中使用 getters/setters 的方法。但我不喜欢这种方法,因为它会为每个新对象创建新的函数实例。

最佳答案

Do I violate any best practices or do something bad in here?

X1 的实现方式不再重要,因为您的库的用户再也看不到它了。不可能再利用它作为 ES6 class 的优势,例如能够从它继承。导出的 Xiuli 只是一个返回对象字面量的工厂函数,这意味着连 instanceof 都不能再工作了。

I'm familiar with the approach of using getters / setters in the class constructor. But I do not prefer that approach since it creates new functions instance with each new object.

好吧,bind 确实也创建了新函数,但一点也好不到哪里去,而且还有额外的对象文字作为实际实例的包装器。这是否比构造函数范围的 getter 需要更多内存取决于私有(private)“属性”的数量与公共(public)方法的数量。虽然工厂函数看起来并不容易使用,但使用 getter 可能更枯燥。

关于javascript - 使用显示模式将 ES6 类属性设为私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48729283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com