[Javascript Basic] - What is 'this' (1)
10187 ワード
JavaScriptを学ぶには、
しかし、
どうしてこんなことになったの?
JavaScriptを学ぶ前にC++とJAVAを勉強しておくと混同しやすくなります.
このときの
したがって,C++とJAVAにおける
ただし、javascriptでは
JAvascriptの
動的とは、関数の呼び出し点が
コード確認で口頭確認よりも理解できます.
うん?どうして急に
要するに、
ブラウザ環境では、
したがって、グローバル変数、グローバル関数、およびグローバルオブジェクトは
上記の場合、
(
次のコードを実行し、もう一度チェックします.
2番目の出力では、Person関数がKoreaオブジェクトのpersonに割り当てられ、person関数が呼び出されると、関数を持つオブジェクトがKoreaなので韓国語が出力されます.
3番目の出力では、2番目の出力と同様に、person関数を呼び出すと、関数を持つオブジェクトがアメリカオブジェクトであるため、英語を出力するアメリカオブジェクトに割り当てられたpersonが要求される.
4番目の出力はAmericanpersonにKoreaperson関数を割り当てた.しかし、person関数を呼び出すと、アメリカのオブジェクトが所有するため、
理解した場合は、次の例の出力を予測します.
this
というキーワードに出会うに違いありません.しかし、
this
が何を意味するのか理解しにくい場合がある.どうしてこんなことになったの?
JavaScriptを学ぶ前にC++とJAVAを勉強しておくと混同しやすくなります.
このときの
this
はクラスを用いて新しく生成されたオブジェクト自身を暗黙的に指すからである.したがって,C++とJAVAにおける
this
は静的な性格を示した.ただし、javascriptでは
this
が異なります.JAvascriptの
this
は動的性質を有する.動的とは、関数の呼び出し点が
this
と決定されるため、値が固定されないことを意味する.this
の理解を容易にするためには,以前学習したthis
を一旦捨ててJavaScript特有の柔軟な考え方でアクセスする必要がある.this
の関連記事を読んだ後、数回の実験を経て、最も理解しやすい結論はこうです.これは、関数を持つオブジェクトを指します。
コード確認で口頭確認よりも理解できます.
function Person(name,age){
this.name = name
this.age = age
console.log(this)
}
Person('jary',100)
このコードを実行して、this
が示す値がwindow
であることを決定することができる.うん?どうして急に
window
と言ったの?Person
関数はwindow
と何の関係がありますか?可能性もある.要するに、
Person
はwindow
オブジェクトに含まれる.ブラウザ環境では、
window
オブジェクトがグローバルに表示されるためです.したがって、グローバル変数、グローバル関数、およびグローバルオブジェクトは
window
によって所有される.上記の場合、
Person
はグローバル関数であるため、window
オブジェクトがそれを所有する.(
window.
は省略されていると考えられます.)次のコードを実行し、もう一度チェックします.
var name = 'jary' // 전역변수 선언 및 정의
console.log(name) // jary
console.log(window.name) // jary
同じ値を出力します.this
が関数が所有するオブジェクトを指定した以上、Person
関数の所有権を変更し、再テストします.var language = '아직 없음' // 전역 변수이므로 window.language로 접근이 가능하다.
function Person(){
console.log('제가 사용하는 언어는 ' + this.language + '입니다')
}
var Korea = {
language:'한국어'
}
Korea.person = Person
console.log(Person()) // 제가 사용하는 언어는 아직 없음입니다.
console.log(Korea.person()) // 제가 사용하는 언어는 한국어입니다.
var America = {
language:'영어'
}
America.person = Person
console.log(America.person()) // 제가 사용하는 언어는 영어입니다.
America.person = Korea.person
console.log(America.person()) // 제가 사용하는 언어는 영어입니다.
最初の出力のPerson関数を持つオブジェクトはwindow
です.したがって、this
はwindow
であるため、出力される値はまだlanguage
ではない.2番目の出力では、Person関数がKoreaオブジェクトのpersonに割り当てられ、person関数が呼び出されると、関数を持つオブジェクトがKoreaなので韓国語が出力されます.
3番目の出力では、2番目の出力と同様に、person関数を呼び出すと、関数を持つオブジェクトがアメリカオブジェクトであるため、英語を出力するアメリカオブジェクトに割り当てられたpersonが要求される.
4番目の出力はAmericanpersonにKoreaperson関数を割り当てた.しかし、person関数を呼び出すと、アメリカのオブジェクトが所有するため、
this.language
が英語を教授する.理解した場合は、次の例の出力を予測します.
function whoAmI(){
console.log(this.name)
}
var a = {
name:"a",
b:{
name:"b",
c:{
name:"c"
}
}
}
console.log(whoAmI())
a.who = whoAmI
console.log(a.who())
a.b.c.who = whoAmI
console.log(a.b.c.who())
a.b.who = a.b.c.who
console.log(a.b.who())
次に、bind、apply、call関数を使用してthis
を直接変更する方法について説明します.Reference
この問題について([Javascript Basic] - What is 'this' (1)), 我々は、より多くの情報をここで見つけました https://velog.io/@jary/Javascript-Basic-What-is-thisテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol