melonJS不清楚使用“this”和构造函数调用

时间:2014-03-14 01:53:18

标签: javascript prototypal-inheritance melonjs

我跟随此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);是如何调用构造函数"。

谢谢!

1 个答案:

答案 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