JavaScriptthis 관련 원리 및 인스턴스 분석
3036 단어 JavaScriptthis가리키다
먼저this가 문제를 가리키는 구결을 공략하는 것을 기억하십시오 (선배들의 총결): 어떤 대상이 함수를 호출하는지, 함수 속의this는 기본적으로 어떤 대상을 가리키는지 주의하십시오 (this는 대상만 가리키는 것을 주의하십시오).여기서'기본 지향'이라고 하는 것은 화살표 함수,call,apply,bind 등 수단을 통해this의 지향을 바꾸기 때문입니다.지금 우리는this의 기본 지향만 토론합니다.
전역 역할 영역과 전역 역할 영역의 함수에서this는 기본적으로 전역 대상 윈도우를 가리킨다
엄격한 모드에서 전역 작용역의 함수에서this는 기본적으로undefined를 가리키는데 이것은 엄격한 모드에 규정된 것이다.
//
console.log(this); // Window
function doSomething(){
console.log(this); // Window
}
doSomething(); // window.doSomething(), this window
//
'use strict';
console.log(this); // Window
function doInStrict(){
console.log(this); // undefined
}
doInStrict();
대상의 함수,this는 이 대상을 가리킨다
var a = 1;
var obj = {
a: 2,
fn: function(){
console.log(this); // {a: 2, fn: ƒ}
console.log(this.a); // 2
}
};
obj.fn();
위 함수가 호출된 후, 인쇄 결과에서 알 수 있듯이this는 호출 함수의 대상obj를 가리킨다.대상의 함수를 전역 대상에 정의된 변수 fn1에 부여하면 fn1을 실행하면 어떤 결과가 나올까요?
var a = 1;
var obj = {
a: 2,
fn: function(){
console.log(this); // Winidow
console.log(this.a); // 1
}
};
var fn1 = obj.fn;
fn1(); // window.fn1();
위의 예에서 알 수 있듯이 fn1과obj.fn이 가리키는 함수는 같지만 호출하는 대상이 다르면 함수에서this의 가리키는 함수도 다르다.비교적 복잡한 예를 하나 더 보자.
var a = 0;
function fn(){
consoloe.log(this.a);
}
var obj1 = {
a: 1,
fn: function(){
console.log(this.a);
}
};
var obj2 = {
a: 2,
fn: function(){
fn();
obj1.fn();
console.log(this.a);
}
}
obj2.fn();
먼저 실행 결과를 말하고 각각 012를 인쇄합니다.obj2가 fn 함수를 호출할 때 fn () 을 먼저 실행합니다. 이 함수는 전역 작용 영역에서 정의된 것입니다. 이 호출은 윈도우로 볼 수 있습니다.fn (), 따라서 이 함수 내부의this는 윈도우 전역 대상,this를 가리킨다.a는 당연히 전역 대상의 a값(0)이다.이어서 obj1을 수행했습니다.fn (), 이것은 obj1에서 fn 함수를 찾아 실행합니다.obj1의 함수 fn을 실행할 때 호출하는 대상은obj1입니다. 따라서 이 때 함수 내부의this가 가리키는 것은obj1 자신입니다.그럼 이게.a가 찾은 값은 대상obj1에서 a의 값(1)이다.
마지막으로 인쇄 함수에서this가 있는 함수 fn은obj2에 호출된 것입니다. 그러면 자연스럽게this는obj2를 가리키기 때문에this.a의 결과는 2입니다.
상기 예에서 알 수 있듯이 함수 내부this는 호출 함수의 대상과 관련이 있고 함수가 어디에서 호출되는지와 관계가 없다.
윈도우 내장 함수의 리셋 함수에서this는 윈도우 대상을 가리킨다.
윈도우의 내장 함수 (setInterval setTimeout 등) 는 리셋 함수 중this가 윈도우 대상을 가리킨다.
var name = 'window';
var obj = {
name: 'obj',
func: function(){
setTimeout(function () {
console.log(this.name) // window
},1000)
}
}
obj.func()
그러나 일반적으로 개발 과정에서 많은 장면들이this의 지향을 바꿔야 한다.뒤에 나는this의 지향을 바꾸는 것에 관한 문장을 전문적으로 쓸 것이다. 여기는 더 이상 군더더기 없이 설명하지 않을 것이다.이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.