1

私は実行アラートとそれがうまく機能するこのデモを持っています:

コードの下。

var Shape = function(){};
var TwoDShape = function(){};
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){return this.name;};

alert('there is alert');​

この行を追加すると:extend(TwoDShape, Shape);

デモをご覧のとおり、アラートを実行できません

この後、次の行を追加します。

var my = new TwoDShape();
alert(my.toString());
alert(TwoDShape.prototype.name);
alert(my.hasOwnProperty('name'));

クラスの名前を警告するshapeTwoDShape、class.name を正常に表示できないのはなぜですか?

完全なコードは次のとおりです: </p>

4

2 に答える 2

1

まず、コード内に関数がないextend()ため、コードでエラーが発生し、実行が停止します。

だから私は jQuery を使ってそれを修正しました$.extend()、またはあなた自身を書くことができextend()ます(ジミーの答えを見てください)。

次に、すべての Shape/TwoDShape インスタンスにnameを使用してアクセスできるクラスを持たせたい場合はtoString()、プロトタイプを拡張する必要があります。

TwoDShape.prototype = $.extend(TwoDShape.prototype, Shape.prototype);

プロトタイプの拡張については、 http: //jsfiddle.net/4Bjjp/6/ で作成した jsfiddle を参照してください。

于 2012-09-20T09:15:17.687 に答える
0

extend関数が存在しないため、コードが壊れます。それを機能させるには、独自のものを実装する必要があります。これは簡単な実装です。

function extend(destination, source) {
  for (var key in source) {
    if(source.hasOwnProperty(key)) {
      destination[key] = source[key];
    }
  }

  return destination;
}
于 2012-09-20T09:05:55.077 に答える