2 Stimmen

RequireJS und Prototypale Vererbung

Ich stoße auf ein Problem bei der Verwendung von RequireJS und prototypaler Vererbung. Hier ist mein Modul:

define(function () {
  function Module(data) {
    this.data = data;
  }

  Module.prototype.getData = function () {
    return this.data;
  };

  Module.prototype.doSomething = function () {
    console.log(this.data);
    console.log(this.getData());
  };

  return Module;

  Module.prototype.callFunction = function (fn) {
    if (this[fn]) {
      console.log('call');
      Module.prototype[fn]();
    }
  };
});

Dann instanziere ich das Modul folgendermaßen:

var module = new Module({ name: 'Marty' });
module.getData(); // gibt { name: 'Marty' } zurück
module.data; // gibt { name: 'Marty' } zurück
module.callFunction('doSomething') // gibt undefined im ersten (und zweiten) Konsolenlog zurück

Die console.logs in module.doSomething() geben immer undefined zurück. Verstehe ich nicht, wie prototypale Vererbung mit RequireJS funktioniert?

2voto

Spencer Carnage Punkte 2056

Wie sich herausstellte, hatte ich die Methode callFunction falsch geschrieben. Der richtige Weg ist:

Module.prototype.callFunction = function (fn) {
  if (this[fn] && typeof this[fn] === "function") {
    this[fn]();
  }
};

Das Problem war, Module.prototype anstelle von this zu verwenden. Ups.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X