- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 EaselJS 创建游戏,我想知道是否有人可以解释演示文件中使用的继承模式是如何工作的。具体来说,我正在查看以下文件:https://github.com/CreateJS/EaselJS/blob/master/examples/assets/Ship.js
在第 7 行,Ship 的原型(prototype)设置为 createjs.container()
...
var p = Ship.prototype = new createjs.Container();
然后在第 28 行,存储了对原始构造函数的引用:
p.Container_initialize = p.initialize; //unique to avoid overiding base class
最后,Ship
对象在第 30 行被初始化
p.initialize = function () {
this.Container_initialize();
我正在努力思考这个模式,因为它与我过去遇到的任何事情都不一样。有人可以向我解释为什么您要使用类的实例作为新类的原型(prototype)吗?也许只是给我指向一个解释这种模式的链接?非常感谢这里的任何帮助...我意识到这个问题有点含糊。
最佳答案
I'm trying to wrap my head around this pattern, because it is unlike anything I've come across in the past.
我也没有。它并没有太大的魔力,但他的结构绝对不常见。参见 Correct javascript inheritance以获得正确的模式。
Can somebody explain to me why you would want to use an instance of a class as a new class' prototype?
你不知道。你想使用一个从父类的原型(prototype)对象继承的对象。 Unfortunately many people use new ParConstructor
for that - 如果构造函数为空,则效果很好。如果构造函数确实创建了实例属性或有其他副作用,就会造成麻烦。不过,大多数人似乎并未注意到或关心这一点。
explanation of this pattern?
function Ship() {
this.initialize();
}
这只是在新实例(构造函数中的 this
)上调用 initialize
方法。我看不出将初始化代码直接放在构造函数中有什么好处,但尽管如此。
var p = Ship.prototype = new createjs.Container();
如上所述,这是设置原型(prototype)链以从Container
“类”继承方法。它可能会进行不必要的实例初始化,因此应将其替换为 Object.create
称呼。并且它为原型(prototype)创建了一个快捷方式变量。
// constructor:
p.Container_initialize = p.initialize; //unique to avoid overiding base class
在这里,创建了对父构造函数的显式引用。 p
上的initialize
属性是继承自Container
原型(prototype),现在它是自己的具有描述性名称的 p
对象的 属性。这是必需的,因为......
p.initialize = function () {
this.Container_initialize();
… // property init stuff
... 这里在原型(prototype)对象上声明了一个自己的initialize
方法,覆盖了继承的方法。不过,现在可以使用该专用属性在当前实例上调用“ super ”初始化代码。这样做是 quite common ,但不是这样用方法。相反,call
通常用于在子实例上应用父构造函数。
更好(至少,更熟悉):
function Ship() {
this.initialize();
}
var super_p = createjs.Container.prototype,
p = Ship.prototype = Object.create(super_p);
p.initialize = function() {
super_p.initialize.call(this);
… // property init stuff
或者,也可以不用初始化
:
function Ship() {
createjs.Container.call(this);
… // property init stuff
}
Ship.prototype = Object.create(createjs.Container.prototype);
关于javascript - EaselJS:有人可以解释一下演示中使用的继承模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008421/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在这个abc.php文件中写入如下代码。 ? 1
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我喜欢用 dotvvm 建立一个视频演示网站。当什么都没有发生时,每次从列表中播放新视频时它都必须开始。使用 bootstrap/MediaObject 我找不到“视频准备播放”事件,因此我们可以开始
我正在开发一个拼贴应用程序,为此我使用DKImagePickerController一次选择多个图像。 pod 的 Github 链接是 https://github.com/zhangao0086/
我试图证明 move 构造函数在消除不必要的复制方面的有用性。但是,当我在 Release 中运行时,Visual Studio 优化器会忽略拷贝。当 move 构造函数不可用时不会调用复制构造函数,
我正在尝试用我自己的测试项目重新创建 HornetQ 示例。但是我遇到了类加载器问题。显然,我缺少文档中未指定的一些依赖项。 文档让我添加 hornetq-core-client.jar netty.
这如何在 Markdown 中完成? 我在 Rmarkdown 中使用投影仪演示文稿,我想要幻灯片左侧的图像和幻灯片右侧的文本。 基本上,这是做什么的:https://tex.stackexchang
有时您需要创建一个 非常 Qt4 中的简单单文件应用程序。然而这是有问题的,因为你总是在做 CPP/H 分离,然后 main() 在另一个文件中...... 任何想法如何在单个文件中执行此操作?尽快弄
有很多关于 SAPUI5 拆分应用程序的演示、教程和文档,但我找不到大量非拆分应用程序的演示。哪里可以买到吗? 为什么如此关注拆分应用程序?它们非常适合移动设备,但我认为桌面应用程序不需要它们。 主视
我的页面 div#posts 下的部分根据脚本结果进行更新。这是一个老式的 mysql 选择查询,回显所有结果标签。 例如foreach($输出为$view) echo “{$view['smthin
ReportLab 用户指南中说: The colortest.py script in reportlab/demos/colors demonstrates thedifferent ways i
ReportLab 用户指南中说: The colortest.py script in reportlab/demos/colors demonstrates thedifferent ways i
我从 git 下载了 PF 演示:https://github.com/primefaces/showcase 并运行 mvn package,但收到以下消息: martin@MyUbuntu:~/
我看过一些程序显示惊人的高度详细的 3d 场景和配乐,但让我震惊的是它们都小于 64kB!这些程序如何运作? 最佳答案 他们按程序生成内容。即他们不添加 3d 模型、位图、基于样本的音频文件,...而
我想让这个休息服务工作: http://www.vogella.de/articles/REST/article.html 在3.4章节,我想运行服务,但是好像不可用。我从教程中复制粘贴了代码。 To
有人可以向我指出 JFreeChart 的 XYSplineRenderer 的工作示例吗? 最佳答案 虽然我从未见过该示例,但XYSplineRendererDemo1.java 是一个可以在dem
我已经下载并解压了 Havok demos ,但该项目依赖于一个文件夹: $(HAVOK_SDKS_DIR)/win32/dx/Include 但它没有设置 HAVOK_SDKS_DIR(没有安装程序
我已经检查了 10 种方法,为什么使用谷歌地图的简单应用程序不能工作,但我没有任何正确的解决方案。我还尝试运行位于 ...\android-sdks\extras\google\google_play
我已经从 oracle 下载中下载了 Swingset2 和 SwingSet3 演示文件(来自“使用 Swing 创建 GUI”教程)(并将它们解压缩/解压到用于 NetBeans 编译器的工作区)
我是一名优秀的程序员,十分优秀!