NATIVE

settings_applicationsObject  >   settings_applicationsFunction  >   settings_applicationsConstructor

NATIVE

Draft
  • account_tree
  • bug_report

ObjectnewFunctionFunction([Stringparameter[, ...[StringparameterN]]], Stringbody)

설명

사용자 함수를 생성하는 생성자 함수이며 function () 객체의 prototype 프로퍼티(Property)와 메소드(Method)를 상속한다.

eval() 함수와 비슷한 성향을 가지지만 eval() 함수보다는 덜 위험하고 전역범위에서 코드를 실행할 수 있으며 프로그래밍(동적) 방식으로 함수를 생성할 수 있어 효율적인 코드를 작성할 수 있도록 해 준다.

구문

기본형식
new Function( [parameter1, [... parameterN,]] body );
생성자를 이용한 함수 생성

매개 변수

Stringparameter[, ...[, parameterN]]선택적 열거

함수 기능 수행시 필요한 매개 변수를 설정한다.

Stringbody필수

함수 동작을 구현한 코드 블럭

반환

ObjectnewFunction

생성된 함수(객체)를 반환

상속 계층 탐색

Function

  • Methods

    • apply()

      주어진 this 또는 arguments로 함수를 호출한다.
    • bind()

      원본 함수와 동일한 본문을 갖는 바인딩된 함수를 만든다. this 키워드가 있는 경우 실제로 자신을 참조할 수 있도록 활성화된다.
    • call()

      인수를 지정하여 객체의 메소드를 호출한다. apply() 메소드와 매우 흡사하지만 배열 하나만을 인수로 지정하는 apply() 메소드와 달리 인수를 추가적으로 설정할 수 있다는 것이 차이가 있다.
    • toSource()

      객체의 소스코드를 나타내는 문자열을 반환한다. 웹브라우저별 지원 여부를 체크할 필요가 있다.
    • toString()

      Object.prototype.toString() 메소드를 상속받았으며 재정의를 통해 사용하거나 재정의 없이 사용할 수 있다. 이 메소드는 객체가 텍스트 값으로 표시되거나 객체가 문자열이 예상되는 방식으로 참조될 때 호출된다. 객체에 따라서 결과는 다를 수 있다.
  • Properties

    • caller

      지정된 함수를 호출한 함수를 참조한다. strict 모드에서는 사용할 수 없다.
    • length

      함수에 사용 되고 있는 인수의 개수를 참조한다.
    • name

      함수 이름을 참조한다.
    • prototype

      모든 생성자에게 상속되며 생성자의 프로토타입을 나타낸다.

Object

  • Methods

    • hasOwnProperty()

      객체가 특정 프로퍼티를 가지고 있는지를 블린 값으로 반환한다.
    • isPrototypeOf()

      해당 객체가 다른 객체의 프로토타입 체인에 속한 객체인지를 체크한다. 이 메소드는 instanceof 연산자와 함께 특정 프로토타입으로부터 상속된 객체만 작동하게 하려는(예를 들어 특정 메소드나 속성이 객체에 있다는걸 보장하려는 때) 코드에서 특히 쓸모가 많다.
    • propertyIsEnumerable()

      매개 변수의 속성이 열거가능한지 여부를 체크한다.
    • toLocaleString()

      객체를 나타내는 문자열을 사용 지역의 방식으로 출력이 된다. 이 메소드는 상속받은 모든 객체가 사용할 수 없고 아래와 같은 상속된 객체에 사용이 된다. Array.prototype.toLocaleString() Number.prototype.toLocaleString() Date.prototype.toLocaleString()
    • toString()

      객체를 나타내는 문자열을 반환한다.
    • valueOf()

      객체의 Primitive(원시) 값을 반환한다.
  • Properties

    • constructor

      객체의 생성자 함수를 참조한다.
    • __proto__

      상속된 [[Prototype]] 참조하거나 설정가능하며 일반적으로 실제 코드상에서는 잘 사용되지 않는다. ECMAScript에서 사용되지 않는 비표준이지만 최신 웹브라우저에서는 비공식적으로 지원하고 있다. 따라서 곧 표준 속성으로 지원될 확률이 높다.

기술 문서

자바스크립트에서의 함수가 갖는 특징

ECMAScript는 객체 기반 언어이면서 동류의 객체 지향의 다른 언어와는 전혀 다른 구조를 갖는다. 기본적으로 함수 단위로 설계되어 있으나 객체 기반으로 동작하며 실제로 ECMAScript의 최상위 객체는 Object 객체이다.

Object 객체의 Prototype 프로퍼티와 메소드를 상속받은 Function 객체가 있으며 이 Function 객체의 prototype.constructor 속성으로 참조되는 Function() 생성자 함수를 통해 함수(객체) 생성을 한다.

또한 Object를 상속 받으므로 함수 생성시 내부적으로 this라는 지시자를 사용할 수 있다. 함수 내부적으로 this 지시자가 포함된 함수가 생성된 경우에는 자신의 프로퍼티와 메소드를 상속한 또 다른 사용자 객체를 생성하는 역할을 한다. 이 때 내부적으로 사용된 this 지시자는 상속받아 생성된 사용자 객체(인스턴스: Instance)를 가리키는 것이라 할 수 있다.

일반적인 개념상 함수는 정적 역할 수행의 목적으로 생성이 되지만 자바스크립트에서는 객체를 생성하는 생성자 함수를 만들 수 있으며 생성자 함수는 필요에 따라 코드 상에서 인스턴스(Instance)로 만들어져 완전한 객체가 되어 사용이 된다.

다른 객체 언어인 자바(Java)와 비교한다면 생성자가 있는 함수는 자바(Java)에서의 생성자가 있는 클래스(Class)라 할 수 있고 클래스가 인스턴스(Instance)로 만들어져 사용 되듯이 자바스크립트에서는 생성자 함수를 통해 인스턴스가 생성이 되어 사용될 수 있다. 만일 생성자 함수에 의해서 인스턴스로 만들어져 사용이 된다면 그 데이터는 Function 객체의 prototype 프로퍼티와 메소드를 가질 수 없으며 이때 부터 Object 객체만을 상속받은  완전한 객체로 독립된다.

예를 들어서 아래의 경우는 일반적인 함수 사용을 위한 함수 생성 코드이지만 그 다음의 코드를 보면 생성된 함수를 인스턴스 객체로 만들어 사용되고 있음을 알 수 있다.

/* 일반적인 함수의 선언과 사용 */
function myFunc(param) {
    alert(param);
}

myFunc("Hello");
/* 인스턴스를 생성하는 함수 */
function myObj(param) {
    this.myData = param;
}

var oInstance = new myObj("Hello");
console.log(oInstance.myData); // 'Hello'를 출력한다.

정리한다면, 함수는 자바스크립트의 핵심이며 코드상에서 일반적인 함수 역할과 인스턴스 생성을 위한 역할을 동시에 수행할 수 있고 Object 객체의 prototype 멤버들을 상속받는다고 할 수 있다. 자바스크립트에서는 함수를 일급 객체로 보고 있다는 것이 함수가 자바스크립에서 얼마나 핵심적인 역할을 하는 객체인지를 알 수 있다.

자바스크립트에서 함수가 일급 객체라 불리는 이유

"자바스크립트에서 함수는 객체다. 그것도 일급 객체다." 라는 표현을 많이 듣는다. 자바스크립트의 함수는 다른 언어와는 다르게 다음과 같은 항목이 가능하며 이같은 이유로 일급 객체로 불린다.

  • 변수(Variable)에 담을 수 있다.
  • 인자(Parameter)로 전달할 수 있다.
  • 반환 값(Return value)으로 전달 할 수 있다.
  • 런타임(Runtime) 생성이 가능하다.
  • 익명(Anonymous)으로 생성이 가능하다.

참고로 함수를 인자로 받을 수 있고 결과를 함수로 반환이 가능한 함수를 '고차함수(High order function)'라 부른다. 자바스크립트의 함수는 고차함수 구현이 가능하다.

 

지원 웹브라우저