5

以下のコードは、ダグラス・クロックフォードのすばらしい本JavaScript:The Good Partsの29〜30ページのコードとほぼ同じです。唯一の違いは、次のようにget_statusプロパティを追加することです。

Quo.prototype.get_status=function() {
  this.status=string;
}

私の質問は、なぜ彼のコードは正常に実行されるのかということですが、以下の私の小さな変更により、myQuoにget_statusメソッドがないというエラーが発生しますか?

<script>
  var Quo=function(string) {
    this.status=string;
  }
  Quo.get_status=function() {
    return this.status;
  }
  var myQuo=new Quo("confused");
  alert(myQuo.get_status());
</script>
4

2 に答える 2

8

メソッドをプロトタイプではなく関数オブジェクトに追加しているQuoため、で作成されたインスタンスには継承されませんnew Quo()。この方法で追加された関数は、従来のOOP言語の静的メソッドに少し似ています。で呼び出すことができますQuo.get_status()が、インスタンスに継承されず、関数自体thisを参照します。Quo

Quo.status = "foo";
Quo.get_status(); // "foo"
于 2012-07-26T05:28:19.503 に答える
0

関数はJavaScriptのオブジェクトです。関数にプロパティを追加すると、それらはその関数のインスタンスに継承されません。ただし、関数のプロトタイプにプロパティを追加すると、それらは継承されます。JavaScriptでプロトタイプベースの継承がどのように機能するかを理解するには、次の回答を読んでください。

于 2012-07-26T06:06:09.430 に答える