# 함수 특징 (2)

출처: https://medium.com/ibare-story/e252506f8525


7. this는 마치 public 멤버 변수와 유사하게 작동

// 비교 코드
function Foo1() {
var x = 10;
}
function Foo2() {
this.x = 10;
}
var foo1 = new Foo1();
var foo2 = new Foo2();
foo1.x; // undefined
foo2.x; // 10

- Foo1안쪽의 지역변수 x는 인스턴스 생성 기간 동안 존재, 반환과 함께 사라짐

=> 함수 호출 동작 방식과 동일

=> 이미 제거되었기 때문에 인스턴스 foo1에서 참조 불가능

- Foo2의 인스턴스 foo2에서는 x 참조 가능

=> 인스턴스의 실행 컨텍스트를 가리키는 this에 생성되었기 때문

=> 컨텍스트에 작성된 값은 컨텍스트의 라이프 사이클 동안 유지

=> 즉, foo2가 메모리에서 제거되기 전까지 x 값은 유지(public 멤버 변수와 유사하게 작동)


8. 함수의 멤버 함수(메소드)도 this에 추가되어야 인스턴스에서 사용 가능

// 예제
function Foo() {
this.getX = function() {
return 10;
};
function getY() {
return 20;
};
}
var foo = new Foo();
foo.getX(); // 10
foo.getY(); // Error!



9. prototype: 동적으로 속성이나 메소드를 추가 할 수 있다

=> 함수의 모든 인스턴스에 즉시 반영됨

// 예제
function Foo(x) {
this.x = x;
}
var foo1 = new Foo(10);
var foo2 = new Foo(20);
foo1.x; // 10
foo2.x; // 20
foo1.y = 100;
foo1.y; // 100
foo2.y; // undefined
Foo.prototype.z = 1000;
foo1.z; // 1000
foo2.z; // 1000


함수에 직접 추가된 속성은 함수의 생성자로 만들어진 인스턴스에서는 사용할 수 없음을 주의해야한다. 생성자가 만들어낸 인스턴스에서 재새용될 메소드나 속성은 반드시 prototype에 추가한다.

=> ?? 무슨말이지 이해가안되넹.. 찾아볼것



'javascript' 카테고리의 다른 글

함수의 특징 (4)  (0) 2017.09.12
함수의 특징 (3)  (0) 2017.09.12
함수의 특징 (1)  (0) 2017.09.12
함수 특징  (0) 2017.09.08
문제와 답 프로그램 (3) - forEach 사용  (0) 2017.09.04

+ Recent posts