함수에는 Constructor인것과 non-constructor인 것이 있다.
Constructor은 인스턴스를 생성할 수 있는 객체로 내부메서드 [[Construct]]를 가진다.
constructor인 함수는 prototype 프로퍼티를 가진다.
non-constructor은 인스턴스를 생성할 수 없는 객체로 내부메서드 [[Construct]]가 없다.
따라서 non constructor인 함수는 prototype 프로퍼티가 없다.
Arrow Function
ES6에 추가된 문법. 화살표 함수를 말한다.
const a = () => { //some code };
화살표함수는 this, super, arguments 를 가지지 않으며, non-constructor이다.
Method
ES6이전의 Method는 객체에 바인딩된 함수(f)를 말했다.
var obj = {
x : 10,
f : function() {return this.x}
}
일반적인 이 함수는 Constructor이며, prototype과 arguments를 가지고 있다. super는 없다.
ES6 Method
ES6이후의 Method는 메소드 축약 표현을 통해 생성된 메소드를 말한다.
const obj = {
x : 10,
f() { return this.x }
}
유일하게 Method만 super를 갖는다. Method는 non-constructor이고, prototype이 없으며,
super와 arguments를 갖는다.
위의 일반적인 메소드는 객체에 바인딩된 함수인데도 constuructor와 prototype을 가져, 객체를 생성 할 수 있다는 문제가 있다. 생성하는 경우는 별로 없겠지만, 가능하다는 것 자체가 좋지 않다.
ES6 method 는 클래스의 Method로 사용된다. 클래스의 메소드로 사용되므로, non-constructor이며 super를 갖는 것이다.
함수구분 | constructor | prototype | super | arguments |
일반함수 | o | o | x | o |
메서드 | x | x | o | o |
화살표함수 | x | x | x | x |
'javascript' 카테고리의 다른 글
[vue] provide와 inject 알아보기 (0) | 2022.07.12 |
---|---|
[javascript] Promise, Async, Await, fetch, axios (0) | 2022.07.06 |
[javascript] nested object deep copy, 중첩 Object 깊은 복사 (0) | 2022.06.09 |
[javascript] super의 역할 (0) | 2022.04.07 |
[javascript] 프로토타입 섀도잉, 오버리이딩 (0) | 2022.04.07 |