Prototype [펌]Function과 객체, this 키워드의 관계

황제낙엽 2008.08.07 13:55 조회 수 : 19 추천:122

sitelink1  
sitelink2  
sitelink3  
sitelink4 http://1 
extra_vars4 ko 
extra_vars5 http://zoonoo.egloos.com/4203424 
extra_vars6 sitelink1 
1. Function이란?
Function은 String, Array와 마찬가지로 자바스크립트의 내장객체(함수객체라 한다)이며 따라서 아래의 표현식은 모두 동일하다.
(function 기본 기능만을 본다면 동일하지만 각각 역할은 틀리다)
function A() {...}

var A = function() {...}

var A = new Function('...');

2. Function과 객체.
Function은 new 와 함께 사용하면 객체에 대한 생성자로 활용 할 수 있다.
(new 키워드를 통해 function 의 기본 기능을 확장한 클래스를 생성 가능한 것이다.
function 블럭은 클래스와 객체로 구성되기 위한 구조(맴버변수와 함수를 가질 수 있는 영역)를 가지고 있기 때문이다.)


function A() {...}

var o = A(); -- A함수를 호출 - o는 A의 반환값.
var o = new A(); -- A함수를 생성자로 사용하여 객체 생성 - o는 A를 통해 생성된 객체.

3. Function과 this
Function 내부에서는 this의 키워드를 사용 할 수 있으며 this의 값은 Function을 함수로 사용하거나 객체의 생성자로 사용할 때 값이 달라진다.

function A() {
  alert(this.location);
}


A(); -- 함수로 사용할때 - this는 window 객체로 할당되며 따라서 window.location (브라우저의 주소값)이 출력됨.
new A(); -- 생성자로 활용할때 - this는 빈 Object로 할당되고 빈 Object에는 location프로퍼티가 없으므로 undefined가 출력.

4. Function와 return
함수를 생성자로 활용 할 때는 return의 사용에 주의해야 한다. 아래의 코드는 둘 다 결과값이 동일하다.
(new 키워드는 자바스크립트가 OOP를 지원하기 위한 메커니즘이 숨어 있으며 메모리 할당시 prototype과 construct 와
유기적인 관계를 가지게 된다. new 와 메모리 할당에 대해 좀더 세부적으로 학습할 필요가 있다.)

function A() {
this.name = 'a';
return 'x';
}

var o = A();

-- 1. A함수 호출.
-- 2. this는 window로 할당
-- 3. window.name 은 'a' 할당
-- 4. 'x' 반환
-- 5. o는 'x'가 됨.
var o = new A();
-- 1. new에 의해 빈 Object생성 하고 A를 생성자로 호출
-- 2. this는 빈 Object로 할당
-- 3. 빈 Object의 name프로퍼티에 'a'할당
-- 4. 'x'반환
-- 5. o는 'x'가 됨. (생성된 객체가 아님!)
번호 제목 글쓴이 날짜 조회 수
30 중첩 함수, 함수 클로저 황제낙엽 2008.08.12 820
29 Defining classes and inheritance (클래스 정의와 상속) 황제낙엽 2011.03.24 392
28 JavaScript Closures for Dummies 황제낙엽 2009.04.08 227
27 [펌] 아사페릴의 사생활 - Code Conventions for the JavaScript Programming Language 황제낙엽 2009.04.02 194
26 자바스크립트의 데이터 타입과 변수 황제낙엽 2008.08.06 179
25 [펌] 아사페릴의 사생활 - Javascript의 constructor 와 prototype 황제낙엽 2009.04.02 156
24 재사용 가능한 일회용 객체 황제낙엽 2008.08.08 133
23 inherits() 를 이용한 상속 황제낙엽 2012.07.18 129
22 [펌] 아사페릴의 사생활 - 싱글톤 패턴을 지향한 Javascript Module Pattern 황제낙엽 2009.04.02 90
21 상속과 Super 로의 접근 황제낙엽 2012.09.18 64
20 체인 생성자(생성자 체인), 프로토타입 체인 그리고 생성자 재지정 황제낙엽 2009.08.12 55
19 [key:value] 형태로 object를 저장할 수 있는 Static영역의 해쉬맵 클래스 (Map) 황제낙엽 2008.11.04 46
18 [펌] 아사페릴의 사생활 - prototype과 __proto__ 와 constructor 황제낙엽 2009.04.02 41
17 생성자 체인과 상속 황제낙엽 2008.08.08 24
16 [펌] 아사페릴의 사생활 - __proto__ 와 construct 와 prototype 황제낙엽 2009.04.02 23
15 [펌]자바스크립트에서 객체 생성 방법 황제낙엽 2008.08.07 21
14 Object 와 Prototype 황제낙엽 2008.08.08 21
13 [펌] TAEYO.NET - JavaScript OOP 코어객체와 prototype를 사용한 객체확장 황제낙엽 2009.04.02 21
12 [펌]객체지향 자바스크립트 file 황제낙엽 2008.08.06 20
» [펌]Function과 객체, this 키워드의 관계 황제낙엽 2008.08.07 19