Javascriptの中でthisキーワードのいくつかの小さい知識

2865 ワード

Javascriptは今一番流行っているクロスプラットフォーム言語の一つです.ずっと先端の面白いものを遊んでいますが、この言語をちゃんと身につけていないことに気づきました.本分を捨てていますので、今の暇なうちに、忘れ物をしっかり補充したいです.
thisのステルス性バインディング
最初は迷っていましたが、最初に見た時は分かりませんでした.そして、似たような場合には、同じ問題を同様の方法で解決することができます.この中の知識を整理してみて、探しやすいです.
これはJavascript言語で設計された誤りですが、このエラーは避けられないようです.関数は対象で、行列は対象です.「Javascript:The Good Parts」の例を参照してください.
 
  
function add (a,b) {return a+b}
 var sum = add (3,4);
 console.log(sum); //sum = 7
この時のsumの結果は7です.
 
  
 > typeof add
 > 'number'
ここでは、addのタイプは数値であることがわかる.
このモードで関数を呼び出すと、thisはグローバル変数にバインドされます.つまり、今の環境では、こうやってthisを呼び出すことができます.
 
  
 this.add(3,4)
これはthisの隠れた結合であり、thisは異なる方法で結合されます.
 
  
var hello = function (){
    return "Hello, " + this.name;
};
name = 'this';
console.log(hello());
この時にはハロー、thisがもらえます.質に入れる
 
  
var hello = function (){
    return "Hello, " + this.name;
};
var user = {
    hello : hello,
    name : 'phodal',

};
console.log(user.hello());

この時、ユーザーの中のハローはハロー関数を指しました.これは私達の理解の中ではありえないです.だからBugです.
この方法で変数を定義して、thisを与えたら、内部関数はその変数を通じてthisにアクセスできます.
var that=this
そこで、状況がちょっと複雑な時に、私達は使う必要があります.
 
  
 vat that = this;
tips:
1.this変数のスコープは常にその一番近い閉鎖関数によって決定されます.2.局所変数(me,self,that)を使用して、thisを内部に結合させることができます.
簡単な例:
 
  
var M = function(){
    this.name = "M";
};

var MM = function(){
    z = new M();
    this.name = "MM";

    z.printName = function(){
        console.log(this.name);
    };
    return z.printName();
};

var mm = new MM;

この時のthisはM関数を指していますが、MM自身が指しています.Mの中のthisを取り除くとundefinedに戻ります.そこで、現在のthisスコープの別名を作成します.thatやselfなどです.
 
  
var MM = function(){
    z = new M();
    this.name = "MM";
    var self = this;
    z.printName = function(){
        console.log(self.name);
    };
    return z.printName();
};
これで一MMに戻ります.これ以外に、ES 5では、コールバック関数のbind方法が用いられます.
 
  
var MM = function(){
    z = new M();
    this.name = "MM";
    z.printName = function(){
        console.log(this.name);
    }.bind(this);
    return z.printName();
};
bindは、方法を受信者に結び付けることができる.
その他
もう一つのハロー、ワールド
ある偶然の機会にprint('Hello')に会って、そして'Hello,World'と出力しました.
高次関数というのは、有用に見えるので、次の編を見てもいいです.