붉은거위 노트 (redgoose note)

함수 프로퍼티와 메서드

Nest
Development
Category
Javascript
Hit
442
Star
0

함수에 대해 typeof 연산자를 사용하면 'function' 문자열을 반환하며 특수화된 종류의 자바스크립트 객체다.

개요

  • 함수에 대해 typeof 연산자를 사용하면 'function' 문자열을 반환한다.
  • 함수는 특수화된 종륲의 자바스크립트 객체다.

length 프로퍼티

함수 몸체 안 arguments 배열의 length 프로퍼티는 함수가 건네받은 전달인자의 개수를 명시한다.
함수는 선언된 매개변수의 개수에 상관없이 임의 개수의 전달인자와 함께 호출될 수 있으며, 이 전달인자들은 arguments 배열을 통해 읽어올 수 있다.
Function객체(aa.ff()으로 표현되는 객체. 외부 에서 호출하는 객체를 뜻함.)의 length 프로퍼티는 함수에 선언된 매개변수가 정확히 몇개인지 명시한다.
arguments.length와는 달리 length 프로퍼티는 함수 몸체의 안과 밖에서 모두 사용할 수 있다.

function check(args)
{
    var actual = args.length; // 실제로 건네받은 전달인자 개수
    var expected = args.callee.length; // 함수가 기대하는 전달인자 개수
    if (actual != expected) { // 두 수치가 일치하지 않으면 예외를 발생한다.
        throw new Error("Wrong number of arguments: expected: " + expected + "// actually passed " + actual);
    }
}

function f(x, y, z)
{
    check(arguments);
    return x + y + z;
}

나만의 함수 프로퍼티 정의하기

함수는 이미 반환한 값들에 대한 정보를 기록하고 있어야 하며 이 정보의 존재는 함수 호출의 경계를 넘어 지속되어야 한다.
이 정보는 전역 변수에 저장될 수 있으나 한 함수에만 사용되는 정보를 전역으로 정의하는것은 불필요한 작업이다.
위 상황에 대한 경우는 정보를 Function 객체의 프로퍼티에 저장하는 것이 좋다.

// 정적 변수를 생성하고 초기화한다.
uniqueInteger.counter = 0;

// 선언된 함수는 호출될 때마다 서로 다른 고유한 값을 반환한다.
function uniqueInteger()
{
    // 정적 변수를 증가시키고 반환한다.
    return uniqueInteger.counter++;
}

apply()와 call() 메서드

call()과 apply()메서드를 사용하면 마치 다른 어떤 객체의 메서드인 것처럼 호출할 수 있다.
첫번째 전달인자는 함수가 소속되어 호출될 객체를 지정하며 이 전달인자는 함수 몸체 안에서 this 키워드의 값이 된다.
call() 메서드의 나머지 전달인자들은 함수가 호출될 때 함수의 전달인자로 건네진다.
함수 f()에 두 숫자를 전달하고 이 함수를 마치 객체 o의 메서드인 것처럼 호출하려 한다면 f.call(o, 1, 2); 표현은 다음 코드와 유사하다.

o.m = f;
o.m(1, 2);
delete o.m;

apply() 메서드는 call() 메서드와 유사하지만 함수로 건네줄 전달인자들을 배열로 지정한다는 점이 다르다.

f.apply(o, [1,2]);