RequireJS和类继承
RequireJS and Class Inheritance
我正在尝试使用RequireJS模块在Javascript中实现经典继承,以使用HTML5构建游戏引擎。我试过使用John Resig的Class.js,但它似乎不像我预期的那样工作。这是我的Github项目代表,如果你下载文件并在客户端文件夹中打开index.html,该应用程序可以在没有服务器的情况下运行。
在应用中,我创建了一个名为Entity的基类。实体是游戏中所有对象的基类,并由许多其他类扩展。精灵类扩展了实体类并包含了动画方法。玩家类扩展了精灵类。
当我创建一个名为Image的类来扩展Entity类时,出现了这个问题。Player和Image类都扩展了实体(玩家是实体->精灵->玩家),但是当玩家设置速度时,它也会影响图像的实例。我添加了一个console.log,在图像的思考函数(游戏循环滴答)中打印物体的速度。如果你按下方向键让玩家四处走动,你会看到玩家的速度来自图像思考打印。
它们不应该是具有单独属性的独立对象吗?这就是我想要的。关于我做错了什么或链接/模式来完成适当的继承的任何想法?
Entity#velocity应该在构造函数中初始化,而不是在"类定义"中初始化(尽管JavaScript中没有这样的事情,即使使用John Resig的class .js等辅助库)。
所有JavaScript变量和属性都只是指向内存中不同位置的指针。您的代码只是简单地更改了velocity
属性的x
属性,而没有实际更改velocity
的引用,因此为什么属性x
的更改会镜像到其他对象中。
所以不是:
var Entity = Class.extend({
velocity: { x: 0, y: 0 },
init: function () { }
});
你可以这样做:
var Entity = Class.extend({
init: function () {
this.velocity = { x: 0, y: 0 };
}
});
相关文章:
- 以可优化的方式使用requirejs加载模板
- RequireJS向模块传递配置总是返回undefined
- 从控制器继承了隔离的作用域以生成可重用的指令
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 当使用控制器作为语法时,如何从父指令继承属性
- 以jquery方式继承Javascript
- PhoneGap/带有RequireJS's的文本插件
- 如何正确地将参数传递给RequireJS回调函数
- 在requirejs中共享实例化对象
- JavaScript对象不是从原型链继承的
- 使用Object.create()的角度服务继承
- What does requirejs.config() do?
- 将javascript应用程序迁移到使用AMD的提示(例如requirejs)
- 数据与Javascript中的继承冲突
- 为什么谷歌地图API's方法未从RequireJS中正确调用
- 创建一个可重用的RequireJs库
- JavaScript对象继承问题
- Javascript嵌套函数属性继承
- RequireJS和类继承
- 使用RequireJS:我应该定义继承的资源吗?