1

我正在关注这个melon JS 教程,并且在第 3 部分。

我不清楚这段代码片段中的几件事

game.PlayerEntity = me.ObjectEntity.extend({

    init: function(x, y, settings) {
        this.parent(x, y, settings);
        ... more code here       
    },

首先,您在我的“游戏”对象中创建了一个名为“PlayerEntity”的新成员,它扩展了 melonJS(我)对象实体类。我明白了。但我不明白

1)this指的是“游戏”对象吗?

2)如果是这样,那么this.parent将指的是“游戏”的父级 - 这只是它继承的 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);“调用构造函数”。

谢谢!

4

1 回答 1

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);

ObjectEntity使用这 3 个参数 (x,y,settings) 调用的,以使用继承构造底层属性和状态。

github上的melonJS源代码:https ://github.com/melonjs/melonJS/blob/master/src/core.js

于 2014-03-14T02:25:22.873 回答