1

メソッドを介してコンストラクタークラスの機能を拡張していprototypeますが、コンストラクタークラスのまもなく作成されるインスタンスにアクセスする方法を理解するのに問題があります。

次のクラスがあるとしましょう。

Bla = function()
{
    this.a = 5;
}

十分に単純です。今、私はそれを非常に簡単な方法で拡張します...

Bla.prototype.f = function(){console.log("Abdf.")};

new Bla().f(); //Logs "Abdf as expected."

aしかし、プロパティ(5)にアクセスしたい場合はどうなりますか?次のようにコンストラクタークラスを拡張しようとしているとします。

Bla.prototype.f2 = function(b){return b * here_are_the_problems.a};

どうやら使用するthisことは何か他のものを指します。代わりに何を使用すればよいですか?

4

2 に答える 2

2

thisメソッドが呼び出されたオブジェクトを参照するために使用します...

console.log(this.a);

の値を設定する方法はいくつかありますthis。1つは、関数がオブジェクトのメソッドとして呼び出された場合に、関数が呼び出されたオブジェクトを一般的に参照することです。

Bla = function()
{
    this.a = 5;
}


Bla.prototype.f = function(){console.log(this.a)};

var bla = new Bla();

bla.f(); //Logs 5

したがって、変数によって参照されるfインスタンスのメソッドとして呼び出されたため、 inの値は同じオブジェクトを参照するように設定されることがわかります。Blablathisf

于 2012-06-16T19:58:59.817 に答える
2

キーワードを使用してthis、インスタンスのプロパティまたはメソッドにアクセスします。 thisインスタンスを表します。aはインスタンスプロパティであり、prototypeメソッドはインスタンスメソッドであるため、でアクセスできますprototype

Bla = function() {
    this.a = 5;
};
Bla.prototype.foo = function () {
   console.log( this.a );
}

var x = new Bla;
x.foo(); // logs 5
​

ただし、Blaにメソッドを直接追加すると...

Bla.bar = function () {
   console.log( this.a ); // ERRORRRRR
}

バーはインスタンス(prototype)メソッドではないためです。この場合、それはのstatic methodBlaあり、インスタンスを持たずthis、関数を参照しますBla.bar。この場合、プロパティはありません。a

于 2012-06-16T19:59:54.140 に答える