【发布时间】:2014-08-19 02:12:58
【问题描述】:
我正在尝试构建我的第一个(浏览器)库,并选择使用节点样式的 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.method、var method、this.prototype.method)。我想知道是否有一种相对简单的方法来创建另一个模块并将它们作为类定义的一部分放入MyClass 以提高可读性。
我正在寻找的理想行为类似于一个模块,它是一个自执行函数,与调用它的对象共享相同的范围(如果可能,包括私有变量/方法)。
我现在才学习 JS 几个星期,所以如果我是白痴,请放轻松。在此先感谢:)
--编辑--
盲目地玩弄它,我已经弄清楚如何使用原型和公共方法来做我正在寻找的事情。
//Underneath MyClass definition
require('./prototype-methods')(MyClass);
require('./public-methods')(MyClass);
那么它在其他文件中的要点是:
module.exports = function(MyClass) {
MyClass.prototype.method = . . . .
MyClass.method = . . . .
}
所以这让我想知道是否有办法用私有方法做类似的事情。有什么想法吗?
---编辑2---
你的用例到底是什么?你能举个例子说明你的 上课呢?
我正在为网络音频 api 创建一个库,它基本上可以让您创作音乐。我有一个库的名称空间,并且名称空间(目前)包含几个不同的类。有score 类,它充当part、effect 和player 类之间的中介。 part 类只是 instrument 的包装器,instrument 是一个具有播放音乐功能的对象。
命名空间有一个工厂函数,它返回一个新的score 实例,而该实例又具有一个工厂函数,它返回新的part(s)、effect(s),最终返回player。此外,在任何给定时间都可能有超过 1 个分数,因此我可能会制作一个播放列表。
我最初尝试使用纯函数模式,但我的代码具有意大利面条的新含义。我对命名空间/类比对功能模式更熟悉。总的来说,我一直在像构建普通的 javascript 文件一样构建库,但由于增加了复杂性,我一直在使用 commonjs 模块 + browserify 轻松地将代码拆分为不同的文件/构建部分。
这个问题所涉及的具体类是part 类。我希望库在它接受的符号方面非常灵活,因此我需要添加很多方法来解释所有这些符号(= 大文件)。
【问题讨论】:
-
大多数时候,如果你使用模块,你倾向于重构一些东西以避免使用构造函数,除非有必要(至少 我 这样做)。顺便说一句,它是多少行?
-
目前大约有 550 行。我不确定这对其他人来说是大是小,但对我来说很难略过它。并感谢建议的编辑 - 这正是我的意思。
标签: javascript node.js browserify commonjs