Javascriptの中でthisキーワードのいくつかの小さい知識
2865 ワード
Javascriptは今一番流行っているクロスプラットフォーム言語の一つです.ずっと先端の面白いものを遊んでいますが、この言語をちゃんと身につけていないことに気づきました.本分を捨てていますので、今の暇なうちに、忘れ物をしっかり補充したいです.
thisのステルス性バインディング
最初は迷っていましたが、最初に見た時は分かりませんでした.そして、似たような場合には、同じ問題を同様の方法で解決することができます.この中の知識を整理してみて、探しやすいです.
これはJavascript言語で設計された誤りですが、このエラーは避けられないようです.関数は対象で、行列は対象です.「Javascript:The Good Parts」の例を参照してください.
このモードで関数を呼び出すと、thisはグローバル変数にバインドされます.つまり、今の環境では、こうやってthisを呼び出すことができます.
この方法で変数を定義して、thisを与えたら、内部関数はその変数を通じてthisにアクセスできます.
var that=this
そこで、状況がちょっと複雑な時に、私達は使う必要があります.
1.this変数のスコープは常にその一番近い閉鎖関数によって決定されます.2.局所変数(me,self,that)を使用して、thisを内部に結合させることができます.
簡単な例:
その他
もう一つのハロー、ワールド
ある偶然の機会にprint('Hello')に会って、そして'Hello,World'と出力しました.
高次関数というのは、有用に見えるので、次の編を見てもいいです.
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'と出力しました.
高次関数というのは、有用に見えるので、次の編を見てもいいです.