데이터로서 함수, 메서드로서 함수, 생성자 함수

Development Javascript

데이터로서 함수, 메서드로서 함수, 생성자 함수

데이터로서의 함수

자바스크립트에서의 함수는 문법일분만 아니라 데이터이기도 하다.

함수는 변수에 할당되거나 객체 프로퍼티와 배열 원소들에 저장될 수 있고, 함수 전달인자 등으로도 사용될 수 있다.

function square(x) { return x * x; }
var a = square(4); // a의 값은 16이다.
var b = square; // b는 square와 같은 함수를 가리킨다.
var c = b(5); // c의 값은 25이다.

함수는 변수뿐만 아니라 객체 프로퍼티에도 할당될 수 있다. 이렇게 객체 프로퍼티에 할당된 함수를 메서드라고 부른다.

var o = new Object;
o.square = function(x) { return x * x; } // 함수 리터럴
y = o.square(16); // y에는 256이 저장된다.

배열 원소에 함수를 할당하는 경우에는 이름조차 필요하지 않는다.

var a = new Array(3);
a[0] = function(x) { return x * x; }
a[1] = 20;
a[2] = a[0](a[1]); // a[2]에는 400이 저장된다.

아래 링크는 함수를 데이터로서 사용할 수 있는것들에 대한 예제를 보여준다.
함수를 데이터로서 사용하기 예제코드 : s_42_2.zip

메서드로서의 함수

함수는 어떠한 변수나 객체의 프로퍼티에도 저장될 수 있다.

함수 f와 객체 o가 있다면 메서드 m을 아래와같이 정의한다. o.m = f;

객체 o의 정의된 메서드 m()은 아래와 같이 호출한다.

o.m();
o.m(x, x+1);

this 키워드는 객체에서 있는 함수에서 그 객체 자신을 나타낸다. 그 메서드가 속해있는 객체를 암묵적으로 전달인자로 건네받는다.

var calculator = {
  operand1: 1,
  operand2: 1,
  compute: function() {
    this.result = this.operand1 + this.operand2;
  }
}
calculator.compute(); // 연산 함수를 실행한다.
print(calculator.result); // 결과를 출력한다.
  • 함수를 메서드로서가 아니라 함수로 호출했다면 this키워드는 전역 객체를 가리킨다.
  • 중첩된 함수의 내부에서 this키워드는 전역 함수를 가리킨다.
  • 자바스크립트 문법은 this에 다른값을 할당하는 것을 허용하지 않는다. 키워드이기 때문이다.

생성자 함수

생성자 함수는 객체의 프로퍼티들을 초기화하는 함수이며 new 연산자와 함께 사용된다.