1

次のコードを検討してください。

function Animal(){
  this.type = "dog";
  this.color = {
                 stomach: "white",
                 paws: "brown",
                 face: function(){
                   if(this.color.stomach === "white"){
                      return "red";
                   }else{
                      return "blue";
                   }
                 }
}

この奇妙な色の犬は、胃の色に応じた顔の色をしています。「this.color.stomach」の部分を構文的に簡単に書く方法があるかどうか疑問に思います。つまり、「これ」は主要な動物オブジェクトを指します。そのキーワードが呼び出される親オブジェクトを参照する同様のキーワードはありますか?たとえば、私はすでにAnimal.color内にいるので、その部分を繰り返して胃の色(Animal.color.stomach)を取得するのではなく、colorプロパティを直接参照する方法があります。 「parent.stomach」のように、「parent」は、呼び出されているプロパティ(この場合はAnimal.color)を指します。

4

2 に答える 2

2

コードを実行してみましたか?this実際に、オブジェクトcolorではなく、を参照しているためです。Animal

これがその仕組みです。this関数が呼び出されたオブジェクトを参照します。通常の状況では、face関数は次のように呼び出されます。someAnimal.color.face()この場合、thisすでにcolorオブジェクトを参照しているため、実際に機能this.colorしている間はエラーになります。this.stomach

于 2011-02-12T20:50:49.380 に答える
1
function Color(data) {
    this.stomach = data.stomach;
    this.face = data.face;
}

function Animal() {
    var self = this; // self now refers to the animal
    this.type = "Dog";
    this.color = new Color({
        face: function() {
            // in the "face" function, "this" refers to the color
            if (this.stomach === "white") { // color's stomach
                return "red";
            } else if (self.type === "Dog") { // animal's type
                return "Blue";
            }
        }
   });
}
于 2011-02-12T21:00:59.533 に答える