ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript_javascript スキルにおけるこのキーワードに関するちょっとした知識

Javascript_javascript スキルにおけるこのキーワードに関するちょっとした知識

WBOY
WBOYオリジナル
2016-05-16 16:09:261254ブラウズ

JavaScript は現在最も人気のあるクロスプラットフォーム言語の 1 つであるはずです。私はフロントエンドでいくつかの興味深いものを試してきましたが、この言語を十分に習得できていないことがわかりました。ちょっと時間がもったいないので、今の空き時間を利用して足りないものを追加していきたいと思います。

これの暗黙的なバインディング

最初見たときは、理解できずに戸惑いました。その後、同様の状況では、同様の方法を使用して同じ問題を解決できます。そこで知識を整理して探しやすくしてみました。

これは Javascript 言語の設計上のエラーですが、関数はオブジェクト、配列はオブジェクトなどであるため、このエラーは避けられないようです。 「JavaScript: The Good Parts」から例を引用

コードをコピー コードは次のとおりです:

function add (a,b) {return a b}
var sum = add (3,4);
console.log(sum); //sum = 7

このときの合計の結果は7です。

コードをコピー コードは次のとおりです:

> 追加の種類
>「番号」

ここでわかるように、加算のタイプは数値です。

このモードで関数を呼び出すと、これはグローバル変数にバインドされます。
つまり、現在の環境では、これ
を次のように呼び出すことができます

コードをコピー コードは次のとおりです:

this.add(3,4)

これは this の暗黙的なバインドであり、this はさまざまな方法でバインドされます。
コードをコピー コードは次のとおりです:

var hello = function (){
「こんにちは、」 this.name;
を返します };
名前 = 'これ';
console.log(hello());

この時点で、Hello, this が取得されます。そして
のとき
コードをコピー コードは次のとおりです:

var hello = function (){
「こんにちは、」 this.name;
を返します };
var user = {
こんにちは : こんにちは、
名前: 'フォダル',

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


現時点では、hello in user は hello 関数を指しているため、これはバグです。

このメソッドで変数を定義し、それに値 this を割り当てると、内部関数はその変数を通じて this にアクセスできます。

var that = this

状況がもう少し複雑な場合は、以下を使用する必要があります:

コードをコピー コードは次のとおりです:

つまり、それ = これ;

ヒント:

1.この変数のスコープは常に、最も近い囲み関数によって決定されます。
2. ローカル変数 (me、self、that など) を使用して、このバインディングを内部で使用できるようにします。

簡単な例:

コードをコピー コードは次のとおりです:

var M = function(){
This.name = "M";
};

var MM = function(){
z = 新しい M();
This.name = "MM";

z.printName = function(){
console.log(this.name);
};
z.printName();
を返します };

var mm = 新しい MM;


現時点では、これは MM そのものではなく、M 関数を指します。これを M で削除すると、戻り値は未定義になります。 そこで、現在の this スコープのエイリアス (that や self など) を作成します。
コードをコピー コードは次のとおりです:

var MM = function(){
z = 新しい M();
This.name = "MM";
var self = this;
z.printName = function(){
console.log(self.name);
};
z.printName();
を返します };

これにより MM が返されます。また、ES5ではコールバック関数のbindメソッドが利用できます。

コードをコピー コードは次のとおりです:

var MM = function(){
z = 新しい M();
This.name = "MM";
z.printName = function(){
console.log(this.name);
}.bind(this);
z.printName();
を返します };

bind はメソッドをレシーバーにバインドできます。

その他

もうひとつのハロー、ワールド

私は偶然 print('Hello')('World') に遭遇し、'Hello, World' を出力しました。

いわゆる高階関数は非常に便利なようです。興味があれば、次の記事を読んでください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。