jsにおけるthisの方向の理解について
1668 ワード
JavaScriptにおけるthisの指向を理解する前に、まずは「thisの最終的な指示は常に呼び出しの対象です」という言葉を覚えておきましょう.
ケース1:関数の直接呼び出し
var a=1; =>>window.a=1
上のコードは書き上げられます. window.hi() その真言を参考にして、この時のthisの指差はそれを使うwindowの対象です.
ケース二:オブジェクト中関数
状況三:この状況は説明しにくいです.直接コードします.
第三の状況に似たコードがあります.
次は前に会った面接問題です.
以下の実行結果を説明します.
理由は文章の冒頭の真言で、thisの最終的な指し示しは終始呼び出されたその対象です.
先ほど出会ったテーマは、やはり参考になります.
ケース1:関数の直接呼び出し
function hi(){
alert(this)
}
hi()// this window
このコードを理解して、一般的にグローバル変数を定義します.実はwindowに属性を追加します.var a=1; =>>window.a=1
上のコードは書き上げられます. window.hi() その真言を参考にして、この時のthisの指差はそれを使うwindowの対象です.
ケース二:オブジェクト中関数
var obj = {
a: "hi",
fn: function(){
alert(this)
}
}
obj.fn()// this obj
この場合、比較的直感的で、真言によると、Objが呼び出す関数fnなので、関数のthisはObjを指します.状況三:この状況は説明しにくいです.直接コードします.
var obj = {
a: {
fn: function(){
alert(this)
}
}
}
obj.a.fn();// this a, obj
このような状況は複雑に見えるが、真言とは衝突しない.関数は二つのオブジェクトがあるが、本当に関数を呼び出す対象はaである.だから、fnのthisは一級上のオブジェクト、つまり彼に一番近い対象を指す.第三の状況に似たコードがあります.
var obj = {
fn:function(){
alert(this)
}
}
window.obj.fn();
一つの道理は、thisはobjを指します.次は前に会った面接問題です.
以下の実行結果を説明します.
function doSomething(){
alert(this)
}
element.onclick = doSomething(); // element
element.onclick = function(){ doSomething()} // element
doSomething() //
3つの場合の出力の結果はそれぞれ elementオブジェクト、windowオブジェクト、windowオブジェクト理由は文章の冒頭の真言で、thisの最終的な指し示しは終始呼び出されたその対象です.
先ほど出会ったテーマは、やはり参考になります.
var person = {
fullname: function{
console.log(this);
},
printAge: function(){
console.log(this);
}
}
person.fullname(); //this person
var age = person.printAge;
age(); //this window( )
コードの中で、まずperson.printAgeの値をageに割り当てて、そしてage()を呼び出す時、window.age()は、ageを呼び出す対象はwindowで、上の真言の道理と同じに、誰が関数thisを呼び出して誰を指しますか?