TIR: 완벽가이드 1-2. 코어자바스크립트 함수 - 프로퍼티, 메소드 (4) 220708

Lumpen·2022년 7월 8일
0

TIR

목록 보기
18/40

함수

자바스크립트에서 함수는 일종의 값이다
typeof를 하면 "function" 이지만 함수는 독특한 자바스크립트 객체다
함수는 객체이기 때문에 프로퍼티와 메소드를 가질 수 있다
또한, Function() 생성자 또한 가지고 있다

length 프로퍼티

함수 몸채 내에서 arguments.length는 전달된 인자의 개수
그러나 함수 자체의 length는 정의한 인자의 개수다

prototype 프로퍼티

모든 함수에는 prototype 프로퍼티가 있다
모든 함수는 서로 다른 prototype 객체를 가지고 있다
함수가 생성자로 사용될 때는 새로 생성된 객체가 함수의 프로토타입 객체로부터 프로퍼티를 상속받는다

call()과 apply() 메소드

call()과 apply()는 함수를 다른 객체의 메소드인 것처럼 간접 호출하도록 한다
call()과 apply()의 첫 번째 인자는 호출 되는 함수와 관련이 있는 객체다
첫 번째 인자는 호출 컨텍스트고 함수 몸체에서 this 키워드의 값이 된다
apply()는 인자의 값이 배열 형태여야 하고, 유사배열 객체도 가능하다

bind 메소드

함수와 객체를 묶는 역할

function f(y) { return this.x + y }
const o = { x: 1 }
const g = f.bind(o) // 함수 f의 this.x에 x: 1을 바인딩
g(2) // 3

bind() 메소드는 파셜 애플리케이션을 구현할 수 있다
전달하는 인자 중 첫 번째 이후 모든 인자는 this 값과 함께 해당 함수의 인자로 바인딩 된다
파셜 애플리케이션은 커링이라고 부른다

bind() 메소드는 함수 객체를 length 프로퍼티와 함께 반환하는데 length에 바인딩된 함수에 정의되어 있는 인자의 개수에서 바인딩된 인자의 수를 뺀 값이지만 0 밑으론 안나온다

bind() 메소드는 커링으로 사용 가능
bind()에 의해 반환된 함수가 생성자로 사용되면 bind()에 전달되었던 this는 무시되고 원본 함수가 생성자로 호출되며, 이미 바인딩된 인자들이 원본 함수 생성자에 전달된다

bind()가 반환하는 함수에는 prototype 프로퍼티가 없다
(일반 함수는 prototype을 삭제할 수 없음)
바인딩된 함수를 사용하여 객체를 만들었을 경우 원본 함수의 prototype을 상속받는다
또한 바인딩된 생성자에 instanceof 연산자를 사용한 값은 원본 함수에 instanceof 한 값과 같다

toString() 메소드

모든 자바스크립트 객체와 마찬가지로 함수도 toString() 메소드를 가지고 있다
대부분의 toString() 메솓 구현체는 함수 전체의 소스 코드를 반환한다
내장 함수의 경우는 보통 함수 몸채로 "[native code]" 와 같은 내용의 문자열을 반환한다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글