0

私は次のものを持っています:

function Vector(X,Y,Direction)
{
    this.X = X,
    this.Y = Y,
    this.Direction = Direction
}

function Particle(Position,Size)
{
    this.Position = Position,
    this.Size = Size,
    this.Velocity = new Vector(0,0,0)
}

Vector は、ベクター オブジェクトを作成するコンストラクター関数です。このオブジェクトは、Velocity プロパティの下にパーティクル オブジェクトを作成する別のコンストラクター関数 Particle によって作成されます。

JavaScript は、構築された Vector オブジェクトのプロパティを Particle オブジェクトまたは Particle.Velocity の下で親にしますか? 簡単に言うと、 new Particle() はこれを作成します:

パーティクル.X

または、できればこれ:

粒子.速度.X

この質問は言い方が悪いかもしれません、すみません。JavaScript の「this」キーワードの範囲を理解するのに苦労しています。

4

1 に答える 1

2

となりますParticle.Velocity.X。特にスコープのためではthisなく、あなたがこれをしたからです:

this.Velocity = new Vector(0,0,0);

Velocityオブジェクトのプロパティに割り当てていParticleます。

ただしthis、javascript では動作が異なるため、時間をかけて理解する価値があります。宣言/記述されたオブジェクトに直接バインドされるのではなく、実行時に関数/メソッドの呼び出し方法に応じてさまざまなものにバインドされます。

たとえば、次のことを考慮してください。

var foo = {};
foo.name = 'Frank';
foo.say = function () {alert('My name is' + this.name)}
foo.say();

ご想像のとおり、上記のコードは「私の名前はフランクです」と警告します。しかし、これを行うと:

var bar = {};
bar.name = 'Benny';
bar.say = foo.say;
bar.say();

上記のコードは、「私の名前はベニーです」と警告します。これthisは、ドットの前の最後の単語/名前にバインドされているためです。したがって、関数がもともと のコンテキストで宣言されていたとしても、コンテナ オブジェクトとしてfoo呼び出されると、その内部で が参照されます。barthisbar

JavaScriptでどのように機能するかの完全な説明については、thisこの他の質問に対する私の回答を参照してください: Javascript の "this" キーワードは、オブジェクト リテラル内でどのように機能しますか?

于 2013-10-17T02:42:23.370 に答える