ディレクトリ
なぜ我々はこれを議論する必要があります
コードワン:
関数FUN1(){ VARの AA = '私は、AAです' 。 console.log(この.aa) } FUN1()。
それは何をプリントアウトでしょうか?それを「私はAAだ」で、
結果は次のとおりです。
未定義
理由:
このとき、これはポイントウィンドウ オブジェクト、
this.aaに相当 window.aa、
AAは ローカル変数であり、 AA、グローバルに事前に変数の宣言が、割り当てが内部関数であり、値が関数内でのみ有効です
window.aa関数内で値を訪問していないので、印刷します未定義。
コードII:
VaRの fun2 = 関数(){ にconsole.log(この.nameの)。 } のvar名=「私は、xだ-グローバル」。 VAR OBJ2 = { 名: '私はX午前-ローカル' 、 FF:fun2 } fun2()。 obj2.ff();
結果は次のとおりです。
私は、x午前- グローバルは、
私は、xだ -ローカル
fun2は、()と等価である window.fun2() 場合には、直接通話機能、この 点ウィンドウ、
obj2.ff()によって OBJ2 アクセスその標的方法は、この 点 OBJ2。
コード3:
VaRの fun2 = 関数(){ にconsole.log(この.nameの)。 } のvar名=「私は、xだ-グローバル」。 VAR OBJ2 = { 名: '私はX午前-ローカル' 、 FF:fun2、 FF2:関数(){ 関数fun3(){ にconsole.log(この.nameの) } fun3()。 } } fun2()。 // グローバル obj2.ff(); //ローカル obj2.ff2()。 //
結果:
私は、x午前- グローバル 私はX - ローカル 私はX -グローバル
私は、以下に定義言ったように
この関数を含む点方法として、それが呼び出されたときにオブジェクトが属します。
この時間でfun3 機能として、オブジェクトのメソッドにバインドしません。
これは何があります
定義されています。これは、メソッドの機能は以下のようにそれが含まれていることを意味呼び出されるオブジェクトが属します。
私は理解して:他の呼び出しのコンテキストを。
この点を変更する方法
- コール()
- 適用されます()
コードの一部を見てください
VaRの名前=「グローバル名」; VAR OBJ1 = { 名: 'OBJ1' } VAR OBJ2 = { 名: 'OBJ2' } 関数がmyName(){ にconsole.log(この.nameの)。 } がmyName() myName.call(OBJ1) myName.call(OBJ2)
結果:
グローバル名
OBJ1
obj2が
呼び出しが 変更され、この 点を
C 全てと適用の違いを
さまざまな方法のパラメータを受け入れます
Object.call(OBJ、ARG1、ARG2、ARG3)
Object.apply(OBJ [ARG1、ARG2、ARG3])