1

JavaScript でコンストラクター関数呼び出しを使用すると、関数内の this 変数/キーワードが新しいオブジェクトにバインドされ、バインドされたすべての「this」値を持つオブジェクトが返されることを読みました。

例えば:

function Person() {
  this.name = "bob";
  this.age = 33;
}

var person = new Person(); // person object with name property of "bob" and age property of 33

このようなことをすると、同じ結果が発生します。

function Person() {
  var localVar = "test",
      fake = "fake";
  this.name = "bob";
  this.age = 33;
}

    var person = new Person(); // person object with name property of "bob" and age property of 33 regardless of the local variables declared inside

ただし、このようなことをすると、自分自身で宣言された変数/プロパティがオブジェクトに返されます

function Person() {
  var self = this;
  self.phone = "123-123-1222";
  self.career = "programmer";
  this.name = "bob";
  this.age = 33;
}

    var person = new Person(); // person object with name property of "bob" and age property of 33, phone of "123-123-1222" and career of "programmer"

最後の例では、実際の「this」キーワードではなく、this のローカル変数に 2 つがバインドされているにもかかわらず、インタープリターは 4 つのプロパティすべてを返すことをどのように認識しますか。

4

2 に答える 2

4

最後の例でselfは、 への単なる参照thisです。これらは同じオブジェクトを指しているため、交換可能です。

function foo() {
    var self = this;
    var that = self;

    console.log(self === this);  // true
    console.log(that === this);  // true
}
于 2013-01-22T06:28:50.460 に答える
0

実行時に実際に

function Person() {
  this.phone = "123-123-1222";
  this.career = "programmer";
  this.name = "bob";
  this.age = 33;
}

「self」は単に「this」に置き換えられるためです。

于 2013-01-22T06:29:06.977 に答える