2017-01-25 3 views
1

Ich bin relativ neu bei Javascript und ich bin verwirrt bei der Vererbung. Hier in diesem Code-Snippet, das ich von einem Phaser-Tutorial bekommen habe, erbt Bullet von Sprite. Zuerst benutzt es die Call-Methode, die aus meiner Kenntnis die Eigenschaften von einer Methode übernimmt und sie in eine andere einfügt. So erhält Bullet an dieser Stelle alle Eigenschaften von Sprite. Call sollte ein Objekt und dann Parameter des Objekts, das aufgerufen wird, also verstehe ich, warum es Spiel und Schlüssel passiert, aber woher kommt die 0,0?Javascript Vererbung .call .create und Konstruktor

Okay, aber nach all dem macht es Bullet.prototype = Object.create, um das Sprite-Objekt in den Bullet-Prototyp zu erstellen? Aber hat es das nicht schon mit der Call-Methode gemacht?

und dann geht es prototype.constructor = bullet aber warum müssten Sie das tun, wenn bullet bereits bullet hält?

Wenn mir jemand dies erklären könnte, wäre ich sehr dankbar. Vielen Dank!

var Bullet = function (game, key) { 

    Phaser.Sprite.call(this, game, 0, 0, key); 

    this.texture.baseTexture.scaleMode = PIXI.scaleModes.NEAREST; 

    this.anchor.set(0.5); 

    this.checkWorldBounds = true; 
    this.outOfBoundsKill = true; 
    this.exists = false; 

    this.tracking = false; 
    this.scaleSpeed = 0; 

}; 

Bullet.prototype = Object.create(Phaser.Sprite.prototype); 
Bullet.prototype.constructor = Bullet; 

Antwort

1

Ich wünschte, ich hätte einen guten Link für Sie. Aber trotzdem ...

Alle Konstruktorfunktionen haben eine Prototypeigenschaft, die initialisiert wurde, als die Funktion als Objekt mit einer constructor Eigenschaft erstellt wurde, die die Konstruktorfunktion selbst festlegte. Sowohl die als auch die constructor Eigenschaften des Prototyps sind schreibgeschützt und können aktualisiert werden.

Objekte einer Konstruktorfunktion erstellt erben Eigenschaften von dem Objektwert in der prototype Eigenschaft Funktion Konstruktor gehalten zu der Zeit wurde das Objekt erstellt. Dieses Prototypobjekt kann wiederum Eigenschaften von der Prototypeigenschaft seines eigenen Konstruktors erben, wodurch eine Vererbungskette eingerichtet wird.

Object.create ist eine Factory-Funktion, die ein neues Objekt zurückgibt, das von einem Objekt erbt, das als erster Parameter übergeben wurde. Das zurückgegebene Objekt erbt seine Konstruktoreigenschaft von dem Objekt Object.create entweder direkt, wenn es sich um eine lokale Eigenschaft handelt, oder indirekt von der Prototypkette des Objekts.


  1. auf einem neuen Einschuss Objekt aufrufen Phaser.Sprite fügt nur lokal vom Phaser.Sprite Konstruktor erstellt Eigenschaften.

  2. Bullet.prototype = Object.create(Phaser.Sprite.prototype); erstellt ein Objekt, das direkt von Phaser.Sprit.prototype erbt. Bullet Objekte erben nun indirekt alle Sprite-Prototypenwerte über die Inheritance-Kette von Bullet-Objekten.

  3. Bullet.prototype.constructor = Bullet; erstellt eine lokale constructor Eigenschaft auf Bullet.prototype, die von Bullet-Objekten vererbt wird. Ohne diesen Schritt würden sie den Eigenschaftswert Sprite über die Vererbungskette erben.