2

取り組んでいる JS プロトタイプ オブジェクトに問題があります。私がやろうとしているのは、クラス レベル変数をオブジェクト リテラルとして定義し、クラスのプロトタイプ メソッドの 1 つを参照してクラス レベル変数のプロパティを設定することですが、どこにも行きません。簡単な例で、私がやろうとしていることは次のとおりです。

var foo = function(args)
{
    this.name = 'bar';
}
foo.stuff = { barbaz: this.foobarbaz(2) };

foo.prototype.foobarbaz(int)
{
    return int;
}

alert(foo.stuff.barbaz); // should alert 2, but I'm missing something

このインスタンスで「this」のスコープを誤解しているだけなのか、それとも foo.stuff.barbaz に割り当てたときに this.foobarbaz() が定義されていないのか疑問に思っています。

このように、クラスレベルの変数内からオブジェクトのプロトタイプ メソッドを参照することは可能ですか?

4

1 に答える 1

0

知っておくべきことは次のとおりです。

  1. のようにプロトタイプでメソッドを定義する必要がありますfoo.prototype.foobarbaz = function(int) {...}。現在の構文は無効です。

  2. メソッドを定義する前に使用しようとしています。ここで関数ホイストが機能することを期待している場合、それは関数宣言にのみ適用され、代入には適用されません。foobarbaz最初に使用するときは、上記の割り当てを移動します。

  3. あなたが提供したこの関数では、でthisはありませんfoo。各関数thisには、 (関数の「コンテキスト」と呼ばれる) の独自の値があり、関数が呼び出されるたびに設定されます。関数のコンテキストがどのように設定されるかについてのルールは、「Javascript スコープを理解する」へのいくつかの回答で確認できます "var that = this"

foo.foobarbaz(2)代わりに、ここでは代わりにを使用する必要があります。this.foobarbaz(2)これthisはおそらくwindow(このコードをオブジェクトのメソッドとしてではなく、JavaScript のstrictモードではないと仮定して) ためです。

于 2012-09-13T13:45:15.247 に答える