【发布时间】:2011-11-20 03:49:55
【问题描述】:
背景
我正在构建一个基于 javascript 的应用程序,该应用程序在移动设备和桌面设备上的工作方式不同。但是,除了 DOM 操作之外,大多数代码在两个平台之间都是通用的,因此我将所有文件结构化,例如: * foo.core.js * foo.mobile.js * foo.web.js
并希望利用面向对象的技术来编写更简洁的代码。
问题:
我有两个带有类的 JavaScript 文件
文件 1:
function ClassA()
{}
ClassA.prototype.foo = function(){};
GreatGrandChildA.prototype = new GrandChildA(); // this is where the error is
function GreatGrandChildA ()
{}
文件 2:
ChildA.prototype = new ClassA();
function ChildA () // ChildA inherits ClassA
{}
GrandChildA.prototype = new ChildA()
function GrandChildA () // GrandChildA inherits ClassA
{}
通常,在像 C++ 这样的语言中,我会在文件 1 中转发声明 GrandChildA。我想知道如何在 Javascript 中做到这一点
编辑:
如果我创建一个包含所有四个类的单个文件 - 按照加载它们的相同顺序,该示例将完全按预期工作:
【问题讨论】:
-
让我直截了当地说 - 您想在声明 GrandChildA 类的新实例之前分配它吗? Javascript 本身不支持任何方式来做到这一点。
-
使用纯 javascript(没有帮助库)时,您必须先下载包含 parent 类定义的 js-file,然后再下载包含子类定义的 js-file。对于您的示例:必须在 File1 之前下载 File2。或者,您可以将两个文件合并为一个。如果您需要在父类之前下载子类,您可以使用外部库或实现您的自定义逻辑来下载和创建类。
-
@WTK:如果我将所有内容都放在一个文件中,效果会很好。不幸的是,我设计它的方式阻止了将所有内容放在一个文件中。但现在看来我必须重新构建整个应用程序。
-
@Andrew - 问题是脚本一个接一个地执行。所以无论哪个代码先执行,它都会失败。有趣的是,将两个脚本放在同一个文件中解决了这个问题。但那是我做不到的事情
-
@skyronic 是的,您可能需要重新构建代码组织。并阅读有关在 Javascript 运行时中提升以了解您的文件 2 实际工作的原因
标签: javascript oop javascript-objects