2

RequireJSとプロトタイプ継承の使用で問題が発生しています。これが私のモジュールです:

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]();
    }
  };
});

次に、次のようにモジュールをインスタンス化します。

var module = new Module({ name: 'Marty' });
module.getData(); // returns { name: 'Marty' }
module.data; // returns { name: 'Marty' }
module.callFunction('doSomething') // returns undefined on the first (and second) console log

console.logsはmodule.doSomething()常に戻りundefinedます。プロトタイプの継承がRequireJSでどのように機能するかを誤解していますか?

4

1 に答える 1

2

結局のところ、callFunctionメソッドを間違って記述していました。正しい方法は次のとおりです。

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

問題は、Module.prototypeの代わりにを使用することでしthisた。おっと。

于 2012-09-27T23:11:33.447 に答える