0

このような「クラス」があるとしましょう (私はRequireJSを使用しています):

myClass.js

define(function() {

  return function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }    
  };    
});

継承を有効にしたい場合は、次のようにします。

 // later, in another file...
 myClass.prototype = new superclass();

しかし、代わりに関数宣言内でプロトタイプを直接定義できないのはなぜですか?

define(['superclass'], function(superclass) {

  return function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }

    this.prototype = new superclass;
  };    
});

これを実行すると、のメソッドmyClassは継承されません。superclassなんで?

前もって感謝します。

4

2 に答える 2

1

なぜあなただ​​けではないのですか:

define(['superclass'], function(superclass) {

  var myClass = function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }


  };

  myClass.prototype = new superclass;    
  return myClass;

});

定義に戻る前に、好きなものを作成できます。

于 2013-07-27T17:31:35.040 に答える
1

これは機能していたはずです (少なくとも FF と Chrome では)。ただし、各インスタンスには独自のプロトタイプがあることに注意してください。これは、ほとんどの場合、不要な複雑さです。

define(['superclass'], function(superclass) {

  return function() {

    this.color = 0;

    this.setColor = function(color) {
      this.color = color;
    }

    this.__proto__ = new superclass;
  };    
});

prototypeコンストラクターのプロパティです。オブジェクトのプロトタイプには対応していません。__proto__ありますが、まだ標準化されていません。

于 2013-07-27T17:26:20.027 に答える