javascript基礎:thisキーワード
2932 ワード
テーマ
パッケージ関数fは、fのthisを指定されたオブジェクトに向ける.
入力例
題目を解く
このテーマの要求は、一つの関数bindThisをカプセル化し、この関数には二つのパラメータがあり、一つのパラメータは一つの内部にthisポインタを使用する関数fがあり、二つ目のパラメータは一つのオブジェクトobjで、bindThisを実行した後、一つの関数を返します.はい、これを見たばかりの時も目まいがすると認めましたが、下のように書いたら、だいぶ良くなりましたか?
thisはJavascript言語のキーワードです.関数関数呼び出し オブジェクト方法呼び出し 構築関数呼び出し bind applycal まとめ:thisのキーワードは、私を呼んだ人が誰かを指します.
解決方法
まず、
bind apply callの違い
callとapplyはいずれも、ある関数が動作するときのcontextすなわちコンテキストを変更するために存在し、換言すれば同じ点: 異なる点: を理解することができます.
解決方法一:bind()を使う
以下の例はその解決法の一つであり、また、bind()法が新しい関数を作成することを示している.
注意:argmentsは関数内の変数として定義されています.したがって、varキーワードでargmentsを定義したり、argmentsを形式パラメータとして宣言したりすると、元のアーグメンントが作成されなくなります.
アーグメンツ変数は配列ではありません.配列に関する属性lengthが文法的にありますが、Aray.prototypeからは引き継がれません.実際にはオブジェクトです.
解決方法3:コールを使う()
apply()と同様にパラメータのみの着信方式が異なります.
このテーマは主にthisのキーワードとthisの方向を変える方法を考察しています.才能が浅くて、このいくつかの方法しか見つけられません.しかし、javascriptという言語の柔軟性を考えると、私はいつも他の方法があると思います.ご指導をお願いいたします.
パッケージ関数fは、fのthisを指定されたオブジェクトに向ける.
入力例
bindThis(function(a, b) {
return this.test + a + b;
}, {test: 1})(2, 3);
出力例6
分析題目を解く
このテーマの要求は、一つの関数bindThisをカプセル化し、この関数には二つのパラメータがあり、一つのパラメータは一つの内部にthisポインタを使用する関数fがあり、二つ目のパラメータは一つのオブジェクトobjで、bindThisを実行した後、一つの関数を返します.はい、これを見たばかりの時も目まいがすると認めましたが、下のように書いたら、だいぶ良くなりましたか?
function f(a, b) {
return this.test + a + b;
}
function bindThis(f, obj) {
//
}
//
var a = bindThis(f,{test:1});
a(2,3);
何がthisですかthisはJavascript言語のキーワードです.関数
を表し、自動的に生成された内部オブジェクトは、関数の内部でのみ使用されます.具体的には、阮一峰のJavascriptのthisの使い方と変数が違っています.キーワードthisは機能領域の制限がなく、入れ子の関数は呼び出された関数からthisを継承しません.簡単にthisの指向を四つの場合に分けます. , , this Global( ) undefined( )。
, this .
, (object)。 ,this 。
apply() , , 。 ,this 。bind,call 。
解決方法
まず、
this
のこのいくつかの字を見て、あなたは条件反射のがjavascriptの3剣士を思い出したのではないですか?bind apply callの違い
callとapplyはいずれも、ある関数が動作するときのcontextすなわちコンテキストを変更するために存在し、換言すれば
this
のためである.JavaScriptの関数には「定義時文脈」と「実行時文脈」と「文脈は変えられます」という概念があるからです. this。
call apply : 。apply() , this , 。 call() , this , , , 。
bindの違い:新しい関数を作成します.具体的には、この文章を見てJavascriptのFunction.prototype.bind 解決方法一:bind()を使う
以下の例はその解決法の一つであり、また、bind()法が新しい関数を作成することを示している.
function f(a, b) {
return this.test + a + b;
}
function bindThis(f, obj) {
//
return f.bind(obj);
}
//
var a = bindThis(f,{test:1});
console.log(a(2,3));
console.log(f(2,3));
出力結果:6
NaN
解決方法2:appyを使用する()function bindThis(f, obj) {
//
return function () {
return f.apply(obj, arguments);
};
}
ここでは関数を使ってapplyメソッドを包装し、関数を返します.arguments
は、JavaScriptのそれぞれの関数の中で特別な変数argmentsにアクセスすることができます.この変数は、この関数に伝達されるすべてのパラメータリストを維持します.注意:argmentsは関数内の変数として定義されています.したがって、varキーワードでargmentsを定義したり、argmentsを形式パラメータとして宣言したりすると、元のアーグメンントが作成されなくなります.
アーグメンツ変数は配列ではありません.配列に関する属性lengthが文法的にありますが、Aray.prototypeからは引き継がれません.実際にはオブジェクトです.
解決方法3:コールを使う()
apply()と同様にパラメータのみの着信方式が異なります.
function bindThis(f, obj) {
//
return function (a,b) {
return f.call(obj, a,b);
};
}
締め括りをつけるこのテーマは主にthisのキーワードとthisの方向を変える方法を考察しています.才能が浅くて、このいくつかの方法しか見つけられません.しかし、javascriptという言語の柔軟性を考えると、私はいつも他の方法があると思います.ご指導をお願いいたします.