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'가 됨. (생성된 객체가 아님!)
번호 제목 글쓴이 날짜 조회 수
57 Javascript delete 황제낙엽 2012.06.11 20
56 익명함수의 사용 황제낙엽 2008.10.14 20
55 [펌]객체지향 자바스크립트 file 황제낙엽 2008.08.06 20
54 XP 에서 input type=text 와 input type=password 의 사이즈가 틀리게 보일때 황제낙엽 2004.08.04 20
53 Early return, early exit - 스크립트 가독성 개선 팁 황제낙엽 2021.03.07 19
» [펌]Function과 객체, this 키워드의 관계 황제낙엽 2008.08.07 19
51 숫자값으로의 변환 형태 황제낙엽 2009.09.02 18
50 이미지 로드 코드 황제낙엽 2009.06.27 18
49 [펌] TAEYO.NET - Js OOP - 나만의 프레임워크 만들기 황제낙엽 2009.04.02 18
48 [펌]JavaScript Class 만들기 황제낙엽 2008.08.07 18
47 SpiderMonkey 를 이용한 개발 일기 file 황제낙엽 2008.07.14 18
46 슬라이딩 메뉴 황제낙엽 2005.12.02 18
45 풍선 도움말 황제낙엽 2005.11.24 18
44 브라우저의 스크롤을 따라다니는 레이어 두번째 file 황제낙엽 2002.12.20 18
43 [펌] 아사페릴의 사생활 - Javascript의 클래스에 관한 이야기 황제낙엽 2009.04.02 17
42 Boolean 데이터 타입 황제낙엽 2009.09.02 16
41 [펌] TAEYO.NET - Js OOP - 사용자 정의 객체. 그리고 상속과 재사용 황제낙엽 2009.04.02 16
40 마우스 오버시 살짝 뒤로 물러나는 듯한 링크 -_-;; 황제낙엽 2003.01.04 16
39 자바스크립트 쿠키 황제낙엽 2009.06.11 15
38 [펌] 아사페릴의 사생활 - __proto__ 와 prototype에 대해.. 황제낙엽 2009.04.02 15