我跟随此melon JS tutorial,并在第3部分。
我不清楚这段代码中的几件事情
game.PlayerEntity = me.ObjectEntity.extend({
init: function(x, y, settings) {
this.parent(x, y, settings);
... more code here
},
首先,您在我的游戏"中创建新成员。对象称为" PlayerEntity"它扩展了melonJS(me)对象实体类。我明白了。但我不明白
1)是this
指的是"游戏"宾语?
2)如果是这样,那么this.parent
将指的是"游戏的父母#34; - 这只是它继承的ObjectEntity类吗?
3)为什么我不能从外部game
对象中调用它?虽然我在init
对象中定义了一个方法,但它说没有方法game.PlayerEntity {}
。
game.PlayerEntity.init(1, 2, 3);
4)如果您使用this.parent(x, y, settings)
调用构造函数,那么x, y, settings
参数设置在哪里?使用Java,您可以调用构造函数:
public Bicycle(int val1, int val2) {
myVal1 = val1;
myVal2 = val2;
}
然后创建类的新实例:
Bicycle bike = new Bicycle(1, 2);
因此,在创建实例时会调用Bicycle的构造函数。
但有了这个,我不清楚this.parent(x, y, settings);
是如何调用构造函数"。
谢谢!
答案 0 :(得分:1)
此约定最初由John Resig描述。事实上,它甚至在melonJS文档中提到了他。
正在进行的继承是.parent
派生所在的位置。基本上发生的事情是this
指的是你当前的对象,在这种情况下是PlayerEntity
。
extend不是内置函数,并且在幕后做了一些事情 - 其中一个是修改属性.parent
以引用"超类"。您可以在源代码中看到这一点
Object.extend = function(prop) {
// _super rename to parent to ease code reading
var parent = this.prototype;
由于PlayerEntity
基本上延长了ObjectEntity
,因此在此次调用期间发生了什么
this.parent(x, y, settings);
是使用这3个参数(x,y,settings)调用ObjectEntity
以使用继承来构造底层属性和状态。
github上的melonJS源代码:https://github.com/melonjs/melonJS/blob/master/src/core.js