일반 연산자 this

황제낙엽 2014.12.30 14:58 조회 수 : 23

sitelink1 https://developer.mozilla.org/ja/docs/We...od_binding 
sitelink2  
sitelink3  
sitelink4  
extra_vars4  
extra_vars5  
extra_vars6  

개요

this 키워드는 컨텍스트 개체 (현재 개체)를 참조하십시오. 일반적으로, 메소드 내에서 this 는 호출 객체 ( calling object )를 참조하십시오.

연산자
구현 된 버전 :JavaScript 1.0
ECMA 버전 :ECMA-262

구문

this

설명

this 는 읽기 전용입니다.

this 를 사용하면 현재 컨텍스트 개체에 대한 참조를 얻을 수 있으며, 그 실행 컨텍스트의 속성과 메소드를 this 통해 ( this . member 같이하고) 볼 수 있습니다. 컨텍스트 객체는 함수에 전달되는 '숨겨진 매개 변수 "라고 간주 할 수 있습니다. this 가 전달되는 데는 세 가지 방법이 있습니다.

유형트리거this
메소드의 호출로 암묵적으로object . method (...)object
Function.prototype.call 을 통해 명시 적으로function .call (object, ...)object
Function.prototype.apply 을 통해 명시 적으로function .apply (object [...])object

위의 방법도 강구되어야 전역 개체가 컨텍스트 개체로 전달됩니다. 이것은 예를 들어 함수 외부의 최상위 코드에서 this 를 사용했을 때와 func (arg1, arg2); 과 같이 객체에 포함하지 않고 함수가 호출되었을 때 등입니다.

ECMAScript 바인딩을 통해 DOM 을 조작하는 경우, JavaScript를 사용하여 이벤트 처리를 할 경우가 많습니다 만, 이벤트 핸들링에서 실행 컨텍스트가 특별한 방법으로 처리됩니다.

메소드의 속박

this 는 함수에 "전달"것이지 함수에 고정되어있는 것은 아닙니다. 즉, 메소드는 그것을 메소드로서 가지는 객체에 속박되는 것이 아니라 객체에 의해 참조되고있을뿐입니다.

속박의 개념을 설명하기 위해 다음의 예를 생각합니다.

function Car (brand) {
   this.brand = brand;
}

Car.prototype.getBrand = function () {
   return this.brand;
}

var foo = new Car ( "toyota");
println (foo.getBrand ()); // println 함수는 정의 된로

이는 예상 "toyota"를 출력합니다.

var brand = "not a car";
var bar = foo.getBrand;
bar ();

이것은 "toyota"대신 "not a car"를 반환합니다. 여기서 this 는 전역 객체이며, 브라우저 환경에서 window 입니다. 왜냐하면 bar ()가 호출 된 컨텍스트는 전역 객체이기 때문입니다. 전역 개체에도 brand 라는 속성이 있고, 그것은 "not a car" 라는 값을 가지고 있습니다. 만약 전역 개체가brand 라는 속성을 가지고 있지 않으면 대신 undefined 가 반환 된 것입니다.

여기에서 알 수 있듯이 bar 는 foo 와는 아무 관계도 없습니다. 객체는 함수를 참조하는 속성을 가질 수 있지만, 그 함수는 그 객체에 소속 하고있는 것은 아닙니다. 구체적으로 말하면,이 함수의 this 는 getBrand 을 정의 할 때 자동으로 foo 로 대체하지는 않습니다. 그렇지 않고, this 는 함수 호출자가 주어집니다. 즉, foo.getBrand () 라는 식으로, foo 가 this 로 foo.getBrand 에 참조 된 함수에 전달 될 ​​것입니다. 다음 표현식은 모두 동일합니다.

foo.getBrand ();
bar.call (foo);
foo.getBrand.call (foo);

이처럼 메소드가 속박되지 않는 것은 의도 된 동작입니다. 이렇게하면 메소드를 "공유"하고 개체에서 개체에 "이동"할 수 있습니다. 앞의 예제에 이어 다음과 같은 문장을 생각합니다.

function Airplane (brand) {
   this.brand = brand;
}
var plane = new Airplane ( "boeing");

plane 은 getBrand 메소드를 가지고 있지 않지만 brand 속성을 가지고 있으며, Car 의 getBrand 메소드와 호환성이 있습니다. 따라서Car.prototype.getBrand 의해 참조되는 함수는 Airplane 의해 생성 된 개체와 Airplane.prototype 의 어느 쪽도 "공유"할 수 있습니다.

번호 제목 글쓴이 날짜 조회 수
177 익스플로러용 스크립트 디버거 (Script Debugger for Windows NT 4.0 and Later) 황제낙엽 2008.12.11 176
176 MS 익스플로러상에서 문제가 되는 Leak 모델 황제낙엽 2009.04.03 171
175 소스 보기 막기 황제낙엽 2005.11.18 168
174 문자열에서 역슬래시(backslash) 문자와 유니코드(Unicode)에 대한 고찰 file 황제낙엽 2021.06.03 160
173 [펌] 아사페릴의 사생활 - Javascript의 constructor 와 prototype 황제낙엽 2009.04.02 156
172 JAVASCRIPT REFERENCE 파일 file 황제낙엽 2005.11.22 153
171 CKEditor 3 JavaScript API Documentation 황제낙엽 2011.11.14 147
170 Java 버전의 JavaScript 엔진 라이노 (Rhino) 황제낙엽 2008.07.14 146
169 [JavaScript Tutorials] More leakage patterns (해석중) 황제낙엽 2009.04.10 142
168 CORS 의 내용과 이에 대한 우회 방안들 file 황제낙엽 2021.12.05 139
167 CORS(Cross-Origin Resource Sharing) - 1 file 황제낙엽 2017.03.07 135
166 재사용 가능한 일회용 객체 황제낙엽 2008.08.08 133
165 inherits() 를 이용한 상속 황제낙엽 2012.07.18 129
164 HTTP 접근 제어 (CORS) 황제낙엽 2017.05.29 125
163 call() and apply() methods in Javascript 황제낙엽 2011.10.07 125
162 외부 라이브러리 (.js) 의 바람직한 동적 로딩 (The best way to load external JavaScript) 황제낙엽 2009.10.05 124
161 자동 형변환 (문자열 -> 숫자) 황제낙엽 2009.06.25 124
160 자바스크립트 학습용 유튜브 강의 (드림코딩 by 엘리) 황제낙엽 2021.03.07 122
159 무지개링크 (rainbowlink) file 황제낙엽 2005.07.16 122
158 Rhino 와 env.js 를 사용해서 자바 서버에서 javascript 를 구동해보자 file 황제낙엽 2012.02.15 116