JavaScript 함수에서 this 지향 문제 상세 정보
this 키워드
어떤 대상이 함수를 호출하고, 함수 안에 있는this는 어떤 대상을 가리킨다.
** 엄격한 모드에서: ** 글로벌 환경에서this는 undefined를 가리킨다
** 비엄격한 모드에서: ** 글로벌 환경에서this는 윈도우를 가리킨다
전역적으로 정의된 함수 직접 호출,this=> 윈도우
function fn(){
console.log(this);
// this window
}
fn();
// window.fn()
대상 내부의 함수 호출,this=> 호출자
var obj = {
fn:function(){
console.log(this);
}
}
obj.fn();
// this obj
타이머의 처리 함수,this=> 윈도우
setTimeout(function(){
console.log(this);
},0)
// this window
이벤트 처리 함수,this=> 이벤트 원본
div.onclick = function(){
console.log(this);
}
// div ,this div
자동 호출 함수,this=> 윈도우
(function () {
console.log(this)
})()
// this window
this 방향 변경
방금 우리가 말한 것은 모두 함수의 기본 호출 방식 중의this지향이다. 우리는 함수 자체의this지향을 무시하고 다른 곳을 가리키는 세 가지 방법이 있다.이 세 가지 방법은call/apply/bind입니다.this의 지향을 강제로 바꾸는 방법입니다.
문법: fn.call(fn 함수 체내this의 지향 어디,arg1,arg2,...);
역할: 연결된 함수 fn을 호출하여this가 가리키고 참고하도록 지정합니다
매개변수:
var num = 666;
function fn() {
console.log('num = ', this.num);
}
fn.call(); // num = 666
콜 방법으로this 지정하기
var name = 'Rose';
var obj = {name:'Jack'};
function fn(){
console.log(this.name);
}
fn(); // Rose
fn.call(); // Rose
fn.call(obj); // jack
콜 방법으로this를 지정하고 참고하십시오.
var name = 'Rack';
var obj = {name:'Jack'};
function fn(a,b){
console.log(this,a,b);
}
fn(1,2); // window 1 2
fn.call(obj,1,2); // obj 1 2
fn(1,3); // window 1 3
applyapply 방법은 여러 개의 매개 변수를 포함하는 그룹을 받아들인다
문법: fn.apply(fn 함수 체내this의 지향점이 어디인지, [arg1,arg2,...]
역할: 연결된 함수 fn을 호출하여this가 가리키고 참고하도록 지정합니다
매개변수:
var obj = {name:'jack'};
function fn(a,b){
console.log(this,a,b);
}
fn(1,2); // window 1 2
fn.apply(obj,[1,2]); // obj 1 2
apply 병합 그룹 사용하기push를 사용하여 요소를 그룹에 추가합니다. 매개 변수가 그룹이라면 이 그룹을 하나의 요소로 추가하는 것이지, 이 그룹 내의 모든 요소를 추가하는 것이 아닙니다. 따라서 우리는 최종적으로 그룹 내의 그룹을 얻을 수 있습니다.
var arr1 = [1,2];
var arr2 = [3,4];
arr1.push(arr2);
console.log(arr1); // [1,2,[3,4]]
concat은 그룹을 합칠 수 있지만, 기존 그룹에 요소를 추가하는 것이 아니라, 새 그룹을 만들고 되돌려줍니다.
var arr1 = [1,2];
var arr2 = [3,4];
var arr3 = arr1.concat(arr2);
console.log(arr1); // [1,2]
console.log(arr3); // [1,2,3,4]
만약 우리가 원소를 기존 그룹에 추가하려면 어떻게 해야 합니까?순환No!이게 앱이니까 쓸모가 있겠네요.
var arr1 = [1,2];
var arr2 = [3,4];
arr1.push.apply(arr1,arr2);
console.log(arr1); // [1,2,3,4]
apply를 사용하여 내장 함수와 연결
/* / */
var numbers = [5, 6, 2, 3, 7];
var max = Math.max(numbers)
var min = Math.min(numbers)
console.log(min,max); // NaN NaN
var max = Math.max.apply(null, numbers);
/* Math.max(numbers[0], ...) Math.max(5, 6, ..) */
var min = Math.min.apply(null, numbers);
console.log(min,max); // 2 7
bind문법: fn.bind(fn 함수 체내this의 지향,arg1,arg2,...);
역할: 새 귀속 함수를 만듭니다.this가 가리키고 참고하도록 지정합니다. 호출해야 실행됩니다.
매개변수:
var obj = {name:'jack'};
function fn(a,b){
console.log(this,a,b);
}
fn(1,2); // window 1 2
fn.bind(obj,1,2); //
fn.bind(obj,1,3)() // obj 1 3
var newFn = fn.bind(obj,3,4);
newFn(); // obj 1 4
newFn(5,6); // obj 3 4
총결산
자바스크립트 함수 중this 지향 문제에 관한 이 글은 여기까지 소개합니다. 자바스크립트 함수this 지향 내용에 대한 자세한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.