JavaScript: "this"키워드 이해
18657 단어 javascriptprogrammingwebdevbeginners
'this'
는 JavaScript에서 가장 중요한 개념 중 하나입니다.이것은 기초의 일부분이다. 네가 그것에 빨리 적응할수록, 너의 인코딩 생활은 더욱 쉬워질 것이다.본문을 읽는 것을 통해'this'의 용법을 이해할 수 있습니다.
먼저, 간단한 5-yo 설명:
The use of
'this'
in programming is like what you do in plain English. For example, when you say "I got a job! This is great!". We know 'this' is referring to the fact you got the job. In other words, 'this' gives context to the second sentence.
읊다, 읊조리다
그러니 이해
'this'
를 하려면 언어 환경이 무엇인지 알아야 한다.어경 해석
컨텍스트는 객체와 연관됩니다.메서드나 속성이 속한 객체를 나타냅니다.코드는 전역 상하문에서 실행되기 시작했고 브라우저에서는
window
(노드에서는 전역 대상을 global
라고 부른다).다음 예를 참조하십시오.var name ='Beyonce'
console.log(this.name) // Beyonce
console.log(window.name) // Beyonce
이 예에서
'this'
는 window
과 같다. 왜냐하면 나는 브라우저에서 그것을 실행하기 때문에 전역 대상은 창이다.그래서 창문.성명 = 잿더미.지금까지 컨텍스트는 창입니다.그래.현재 코드가 실행되는 과정에서 상하문이 바뀔 것이다.대상을 호출할 때마다
'this'
이 방법을 호출할 대상으로 설정합니다.다음 예제를 참조하십시오.4행과 10행은 같지만
'this'
의 값에 따라 다른 결과를 기록한다.var name = 'Beyonce'
function sayMyName(){
console.log(`Your name is ${this.name}.`) // 'this' is window
}
var heisenberg = {
name: 'Heisenberg',
sayMyName: function () {
console.log(`Your name is ${this.name}.`) // 'this' is heisenberg
}
}
sayMyName() // Your name is Beyonce.
heisenberg.sayMyName() // Your name is Heisenberg.
위의 코드는 잘 작동하지만, 우리는 네 번째 줄을 반복했다. 이것은 멋있지 않다. (기억해라: DRY는 자신을 반복하지 마라.)
한 번만 작성하고 다시 사용할 수 있는 방법이 있다.이를 위해 우리는 함수
console.log()
를 사용한다."이거"랑 bind.
bind
는 주어진 Bind
(대상) 을 호출 함수에 적용합니다.함수에 귀속할 대상은 귀속할 매개 변수로 전달됩니다.예제 참조:
function sayMyName(){
console.log(`Your name is ${this.name}.`)
}
var beyonce = {
name: 'Beyonce',
}
var heisenberg = {
name: 'Heisenberg',
}
let sayBeyonce= sayMyName.bind(beyonce)
let sayHeisenberg= sayMyName.bind(heisenberg)
sayBeyonce() // Your name is Beyonce.
sayHeisenberg() // Your name is Heisenberg.
좋아요!현재, 우리가 새로운 함수를 만들고 싶지 않다면, 모든 사람의 이름을 말해 보세요.sayMyName()만 사용하려고 합니다.
우리는
'this'
함수와 범형person 대상을 통해 실현할 수 있다."이거"랑 전화.
bind와 마찬가지로
call
도 사용자 정의 값을 call
로 설정할 수 있습니다.예제 참조:
var person = {
sayMyName: function(){ console.log(`Your name is ${this.name}.`)};
}
var beyonce = {
name: 'Beyonce',
};
var heisenberg = {
name: 'Heisenberg',
};
person.sayMyName.call(beyonce); // Your name is Beyonce.
person.sayMyName.call(heisenberg); // Your name is Heisenberg.
화살표 기능이 있는 "this"
화살표 기능 주의🏹
화살표 함수를 사용할 경우 새 값이
'this'
로 설정되지 않습니다.반대로 그것은 부작용역에서 하나를 계승했다.이 예는 이전 예와 같지만 일반 함수 대신 화살표 함수를 사용합니다.
Ash는 콘솔에 두 번 기록합니다.이상하죠?
var name = 'Ash';
var person = {
sayMyName: () => console.log(`Your name is ${this.name}.`)
};
var beyonce = {
name: 'Beyonce',
};
var heisenberg = {
name: 'Heisenberg',
};
person.sayMyName.call(beyonce); // Your name is Ash.
person.sayMyName.call(heisenberg); // Your name is Ash.
콜/bind를 사용해도 작동하지 않습니다.그것은 여전히 잿더미를 기록하고 있다.왜?
"this"는 일반 vs-arrow 함수를 가지고 있다
일반 함수는 호출자에게 자신의
'this'
대상을 설정합니다.그러나 화살표 함수는 없습니다. 화살표 함수는
'this'
이전의 상하문, 즉 그것이 있는 범위를 계승했습니다.이 경우 창에서이것은 어휘 범위라고 불린다.따라서 우리가arrow 함수를 사용할 때
'this'
는 함수의 호출자와 무관하다.그것은 여전히 'this'
와 같고 변하지 않았으며 결과는'재'로 기록되었다.만약 우리가 정규 함수로 화살표 함수를 포장한다면?
일반 함수가 호출되고
window
호출자로 설정됩니다.arrow 함수는 일반 함수 내부에서 호출됩니다.arrow 함수의'this'값은 외부(일반) 함수의'this'값을 계승합니다.그래서 얘가 작용했어!
var name = 'Ash';
var person = {
sayMyName: function () {
const arrowFunction = () => console.log(`Your name is ${this.name}.`);
arrowFunction();
},
};
var beyonce = {
name: 'Beyonce',
};
var heisenberg = {
name: 'Heisenberg',
};
person.sayMyName.call(beyonce); // Your name is Beyonce.
person.sayMyName.call(heisenberg); // Your name is Heisenberg.
쿨하다그러면 화살표 함수를 사용하면 안 돼요?하나도 안 그래.당신이 정말로 주위의 환경에서'this'를 계승하고 싶을 때, 많은 용례가 있다.이러한 상황에서 화살표 함수는 매우 유용하다.
화살표 함수가 있는 "this"의 유용한 예
우리 예를 하나 봅시다.여기서, 우리는 명칭 그룹을 사용하여 2초마다 다른 명칭을 기록하기를 희망한다.이 코드를 실행하면 오류가 발생합니다. [Uncaught TypeError: 정의되지 않은 속성'forEach'를 읽을 수 없습니다.
var people = {
names: ['Ash', 'Beyonce', 'Heisenberg'],
sayNames: function () {
// log each name after 1 second
setTimeout(function () {
console.log(this);
this.names.forEach(function (name) {
console.log('your name is' + name);
});
}, 2000);
},
};
people.sayNames();
왜?
sayNames를 호출하면 this가 people 객체로 설정됩니다.그러나 setTimeout을 호출할 때'this' 를 창으로 설정합니다.창에 속성이 없습니다
'this'
.우리는 어떻게 이 문제를 해결합니까?너 맞혔어!외부 상하문에서'this'를 계승하는 arrow 함수를 사용합니다.다시 말하면, 이것은sayNames 상하문에서 계승될 것이다.
var people = {
names: ['Ash', 'Beyonce', 'Heisenberg'],
sayNames: function () {
console.log(this);
// log each name after 1 second
setTimeout( ()=> {
console.log(this);
this.names.forEach(function (name) {
console.log('your name is ' + name);
});
}, 2000);
},
};
people.sayNames();
저에 대해서 연락 주세요!👋👩💻
읽어주셔서 감사합니다!나는 열광적인 학습자이다. 나는 내가 아는 것을 공유하는 것을 좋아한다.나는 무료로 프로그래밍을 가르친다👉 here와 나는 인코딩 기술을 좀 공유했다.네가 원한다면 채팅방에 와서 인사해도 된다😁
Reference
이 문제에 관하여(JavaScript: "this"키워드 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simonpaix/javascript-understand-this-keyword-55j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)