【发布时间】:2015-04-15 13:07:55
【问题描述】:
我正在创建一个程序,该程序最终将创建数千个小对象(理想情况下约为 60,000 个),每个小对象都包含特定信息。它将从一个小的 JSON 文件加载每个对象,该文件已经创建并位于服务器上的目录树结构中。
它如何找到文件对这个问题无关紧要(假设它超出了它的“范围”)但是我试图通过逐步了解程序的工作原理。
假设我也稍微简化了这一点;我知道你们中的许多人可能会发现我似乎在我的请求加载数据和实际加载数据之间添加了一个不必要的层(显然我可以通过 jQuery 的 $.getJSON().done()),但是因为有要考虑文件系统结构,程序也需要处理该部分。
Data = function() {
var VERSION = 1.1;
if (this.constructor === Data) {
throw new Error("Objects may not be directly instantiated from an abstract class.");
}
}
// Loads a file with the path from the root set in config.json
Data.prototype.loadData = function(treePath,callback) {
// does data loading stuff here and proceeds through, eventually getting to this line:
callback(req,loadedData);
}
现在,我有一个抽象层 - 我不希望 Data 对象在其自身中创建,这就是为什么如果有人调用“new Data();”它会抛出错误。这是故意的。
然后我将拥有两个继承 Data 的对象;两者都具有以不同方式处理加载数据的方法。但是,由于两者的文件树结构相同,因此创建一个抽象对象来继承是有意义的。 (或者,作为一个子问题,对于 Data 对象的对象文字,这是一个很好的论据吗?)
现在,我从 FOO 调用 loadData,然后 Data 将调用位于 FOO 内部的 callack。我尝试将其声明为 FOO.prototype.pareseData 和 FOO.parseData,这没有区别。
FOO.parseData = function(req,path) {
// Parse the data and deal with it as needed.
}
单步执行,当我从主程序调用 FOO 并告诉它开始加载数据时,我可以看到“this”值。最初,this = FOO,正如预期的那样;在 Data 调用回调函数之前,这将保持 FOO。
一旦代码命中 FOO.parseData,它就会从 FOO 变为“窗口”。
我不知道为什么...?
【问题讨论】:
-
FOO是什么?我没有看到它在任何地方定义 -
文字多的时候,人们抱怨它,文字太少的时候,人们抱怨它......
-
RGraham - 假设 FOO 已正确声明和实例化。我把它省略了,因为除了几行额外的代码之外,它并没有给问题增加太多。
-
@StevenC.Britton (S)他只是指出,如果你简洁的话,你会在 Stack Overflow 上获得更多帮助。这是一个事实,基于他在这个网站上的时间和他们获得的经验。您可以忽略这一点,但不要将其视为对您写作技巧的个人侮辱。
-
是的,创建一个加载器函数,通过将数据位传递给相应的构造函数来执行服务器请求并构造
Foo和Bar实例。如果您的 foos 和 bar 不共享任何通用方法,那么它们甚至不需要超类,但您对此有点模糊。而不是向您的服务器发出 60000 个请求,您绝对应该捆绑文件(可能是在服务器端动态地)并且只发出几个大请求。
标签: javascript oop scope