gpt4 book ai didi

javascript - 用模块拆分一个大类

转载 作者:搜寻专家 更新时间:2023-11-01 00:43:53 28 4
gpt4 key购买 nike

我正在尝试构建我的第一个(浏览器)库,并选择使用 Node 样式的 commonjs 模块 + browserify 来组织我的代码。我对其进行了结构化处理,因此每个模块都包含 1 个类,在一些类开始变得非常庞大之前,效果非常好。

所以我假设我有一个类

module.exports = MyClass;

function MyClass() {
//initializing stuff

this.publiceMethod= function publicMethod() {
//do stuff
};

var privateMethod = function privateMethod() {
//do stuff
};
}

MyClass.prototype.notSureMethod = function notSureMethod() {
//err... static method?
}

问题是我有大量方法使用各种方式声明它们(this.methodvar 方法this.prototype.method)。我想知道是否有一种相对简单的方法来创建另一个模块并将它们作为类定义的一部分引入 MyClass 以提高可读性。

我正在寻找的理想行为类似于一个模块,它是一个自执行函数,它共享调用它的相同范围(如果可能,包括私有(private)变量/方法)。

我学习 JS 才几个星期,如果我是白痴,请放过我吧。提前致谢:)

--编辑--

盲目地玩弄它,我已经弄清楚如何使用原型(prototype)和公共(public)方法来完成我正在寻找的事情。

//Underneath MyClass definition
require('./prototype-methods')(MyClass);
require('./public-methods')(MyClass);

那么它在其他文件中的要点是:

module.exports = function(MyClass) {
MyClass.prototype.method = . . . .

MyClass.method = . . . .
}

所以这让我想知道是否有一种方法可以用私有(private)方法做类似的事情。有什么想法吗?

---edit2---

What exactly is you use case? Could you give an example of what your class does?

我正在为 Web 音频 API 创建一个库,基本上可以让您创作音乐。我有一个库的 namespace , namespace (目前)包含几个不同的类。有 score 类,它充当 parteffectplayer 类之间的中介。 part 类只是 instrument 的包装器,它是一个具有播放音乐功能的对象。

命名空间有一个返回 score 新实例的工厂函数,它又有一个返回新 part(s)、effect 的工厂函数(s),最后是 player。此外,在任何给定时间都可以有超过 1 个分数,因此我可以制作一个播放列表。

我最初尝试使用纯函数模式,但我的代码具有意大利面条的新含义。与功能模式相比,我更熟悉命名空间/类。总的来说,我一直在构建这个库,就像我构建一个普通的 javascript 文件一样,但是由于增加了复杂性,我一直在使用 commonjs 模块 + browserify 来轻松地将代码拆分成不同的文件/构建各个部分。

这个问题具体的类是part类。我希望库在接受的符号方面非常灵活,因此我需要添加相当多的方法来解释所有这些符号(= 大文件)。

最佳答案

我发现通过将 MyClass 作为参数传递给模块,我几乎可以将除私有(private)成员之外的所有内容添加到带有模块的 MyClass 中。

似乎我在技术上可以使用eval 添加/访问私有(private)成员,但有人告诉我这是邪恶的。只需将原型(prototype)和公共(public)方法从文件中取出就可以显着减少它,因此将私有(private)成员留在其中完全没问题。

关于javascript - 用模块拆分一个大类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374691/

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