희자는 네 가지 문법이 있는데,this도 마찬가지다
간단하게 말하면this는 네 가지 응용 장면이 있는데 그것이 바로 구조 함수, 대상 속성, 일반 함수,call과apply 방법이다.
첫 번째, 구조 함수:
1 function Foo(name){
2 this.name=name;
3 }
4
5 var f=new Foo();
여기서 this는 새로운 대상 f를 가리킨다.대상 속성 중에는 또 다른 점이 있다.
1 var obj={
2 a:"funny",
3 b:function(){
4 console.log(this.a);
5 }
6 };
7
8 obj.b();// funny
여기에서 우리는 b를obj 대상의 속성으로 실행하고 실행할 때this는 현재 대상obj를 가리키기 때문에 컨트롤러에서funny를 출력합니다.다음은 세 번째 상황을 보겠습니다. 그러면 이 예를 들어 코드를 조금 바꾸겠습니다.
1 var obj={
2 a:"funny",
3 b:function(){
4 console.log(this.a);
5 }
6 };
7
8 var f1=obj.b;
9 f1(); // undefined
9줄에서 f1을 실행하면 'funny' 를 찾을 수 없고 undefined를 출력할 수 없습니다.왜냐하면 우리가 이렇게 일반 함수로 실행할 때this는 window 대상을 가리키고, window 대상에서 a라는 속성을 찾을 수 없기 때문에undefined를 출력합니다.참고로 속성을 찾을 수 없으면undefined로 돌아갑니다.변수를 찾을 수 없으면 "xxx is not defined"로 돌아갑니다.
마지막 상황은 콜과 apply에 있습니다.사실 우리는 콜과 apply를 특수한 집행 방법으로 간주할 수 있다.'this가 가리키는 실행 방법을 사용자 정의할 수 있다'고 할 수 있는데, 이 이름은 듣기에는 좀 길지 않지만, 원리는 확실히 그렇다.f1 () 을 직접 할 때,this는 기본적으로 window입니다.바꿔야 되는데 어떡하지?특수한 집행 수단을 써서 중간에 단어---call 또는 apply를 하나 더 삽입해야 한다.
1 var obj={
2 a:"funny",
3 b:function(){
4 console.log(this.a);
5 }
6 };
7
8 var f1=obj.b;
9 f1.call({a:"serious"}); // this , , serious
여전히 이 코드입니다. 그러나 제가 조금 고쳐서,this의 지향을 비틀어 보았습니다. 결국 제가 쓴 {a: "serious"} 대상을 가리키면,serious를 출력할 수 있습니다.apply와call의 차이는 많지 않다. 왜냐하면 여기에서 나는 단지 하나의 매개 변수만 전달했기 때문에 시범을 보일 수 없다.call-->첫 번째 파라미터는this이고 그 다음은 다른 파라미터입니다.apply-->첫 번째 파라미터는this이고, 그 다음은 그룹으로 감싸는 다른 파라미터입니다.이 정도 차이야.
괜찮겠지('...ω・´)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.