Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能将巨大的javascript文件拆分为几个保留其结构的较小文件?_Javascript - Fatal编程技术网

是否有可能将巨大的javascript文件拆分为几个保留其结构的较小文件?

是否有可能将巨大的javascript文件拆分为几个保留其结构的较小文件?,javascript,Javascript,我有一个相当大的javascript类,在一个js文件中存储了大量的方法。这些方法在逻辑上可以分类为常用方法、过滤数据的方法、导航方法等。现在,我希望将此类拆分为单独的文件,每个文件都包含自己的特定类别方法,并将所有属性和常用方法保留在当前文件中。简而言之,我需要一些c#partial关键字用于的东西 我希望避免使用prototype,因为这意味着我必须为每个看起来不太好的函数键入类名,比如class.prototype.functionname=function(){…} 更新:这就是我的班级

我有一个相当大的javascript类,在一个js文件中存储了大量的方法。这些方法在逻辑上可以分类为常用方法、过滤数据的方法、导航方法等。现在,我希望将此类拆分为单独的文件,每个文件都包含自己的特定类别方法,并将所有属性和常用方法保留在当前文件中。简而言之,我需要一些c#
partial
关键字用于的东西

我希望避免使用
prototype
,因为这意味着我必须为每个看起来不太好的函数键入类名,比如
class.prototype.functionname=function(){…}

更新:这就是我的班级的样子

function MyClass() {
    var self = this;
    self.common = function() {...}
    self.filterData = function() {...}
    self.navigate = function() {...}
}

我不知道如何使用原型或扩展正确处理
self
,如果你的类不使用原型,你几乎没有机会——这是一个[太]大的函数。但是,这样大的函数无论如何都不应该存在,您确定需要它成为一个类(具有多个实例)吗?然后,您应该尽可能地将函数移动到原型。如果不是,单例对您来说更有意义,它本质上只不过是一个对象文本。您还可以看看,这正是您所需要的(或其风格之一)-(子)模块通常可以轻松地分布在不同的文件中,可能使用依赖项跟踪加载程序

如果是这样,您可以轻松地将其拆分为单个部分。这并不意味着您需要重复
class.prototype..=..
,您可以使用像
extend

MyFavLibrary.extend(class.prototype, {
    functionname: function functionname() {…},
    …
});
或者简单的IEFE关闭:

(function(proto) {
    // even some place for static, private helper functions
    proto.functionname = functionname() {…};
    …
})(class.prototype);

你为什么反对原型?这正是它的用意。您可能可以使用一些额外的代码将两个对象合并在一起,但这会降低JS的可读性。如果没有更好的方法,我将使用prototype。在我看来,添加几个方法是可以的,但是如果你有几十个方法,那么它看起来有点难看,因为类名重复了太多次,你不想破坏你当前的结构(不需要全部的代码)
SomeObj.prototype={fn1:…,fn2:…,}
$.extend(SomeObj.prototype),{fn1:…,…})
好的,我没有意识到
。扩展
。它完全符合我的目标,因为我不必重新键入我的类名。谢谢。我已经按照你的要求更新了问题。你能告诉我扩展在我的情况下会是什么样子吗。我不知道如何正确处理
self
。谢谢有很多可能性,我扩展了我的答案第一种情况。你应该阅读关于模块模式的链接章节。到@Bergi:对不起,但我不完全理解你的想法。我看到你关于将其重构为singleton的建议,但如果我想保持原样,即
函数MyClass(){…}
,我还能用
扩展它吗?
原型
?你能为我的具体案例写一个例子吗?我试过了,但没有效果:新文件看不到主模块内定义的
self
变量。是的,你需要使用一个原型,可以从不同的文件扩展。是的,prototype函数无权访问构造函数中的任何私有作用域变量,如
self
。请改用
this
——这些函数通常在实例的上下文中调用