0

初期化中にコンストラクターの静的プロパティを使用したいのですが、次のようにします。

var MyConstructor = function() {
  this.foo = 'foo';
  this.set_bar();
}

MyConstructor.bar = "bar";

MyConstructor.prototype = {
  set_bar: function() {
    this.bar = this.constructor.bar;
  }
}

var myObj = new MyConstructor();

これは新しいブラウザでは問題なく動作するように見えますが、古いブラウザではうまくいきませんか? Googleでこれを見つけるのに苦労しました。this.constructor建設中にプロパティが利用できないように、一部のブラウザが建設後に設定されているのではないかと思います。

4

1 に答える 1

1

プロパティの設定はなく、オブジェクトで検索されます。プロパティがオブジェクトにない場合は、オブジェクトのプロトタイプ オブジェクトで検索されます。オブジェクトのプロトタイプ オブジェクトにない場合は、オブジェクトのプロトタイプ オブジェクトのプロトタイプ オブジェクトなどを参照します。

MyConstructor.prototype =適切なコンストラクターを持つデフォルトのプロトタイプ オブジェクトを上書きするため、コードは期待どおりに動作しません。SoMyConstructor.prototypeにはconstructorプロパティがなく、どちらもありませんmyObj。そうthis.constructor === ObjectではありませんMyConstructorObject.barであり、結果としてundefinedそうです。myObj.bar

修正は、上書きする代わりにデフォルトのプロトタイプを拡張するか、コンストラクターを再挿入することです。

MyConstructor.prototype = {
    set_bar: function() {
        this.bar = this.constructor.bar;
    },

    constructor: MyConstructor
}
于 2013-03-14T22:46:35.173 に答える