👋 GeneratorFunction
GenratorFunction
-
GeneratorFunction.constructor
를 사용하여- 제너레이터 함수를 생성
- 파라미터를 문자열로 작성
- 마지막 파라미터가 함수 코드가 되고 앞은 파라미터 이름이 됨
const fn = new Function('one', 'return one'); console.log(fn(100)); // 100 const create = Object.getPrototypeOf(function* () {}).constructor; const sports = new create('one', 'yield one'); const obj = sports(100); console.log(obj.next()); // {value: 100, done: false}
const gen = function* () {}; /* 1. 오른쪽 gen을 펼치면 prototype이 있음 - 이것을 펼치면 constructor가 있어야 하는데 없음 - 또한 메소드로 없음 2. __proto__가 있으며 이것을 펼치면 constructor가 있음 - __proto__에 다른 오브젝트의 prototype에 연결된 프로퍼티를 - 인스턴스 개념으로 생성하여 첨부한 것이 표시 됨 3. 즉, GeneratorFunction의 constructor가 첨부된 것 */
- 예시
const create = Object.getPrototypeOf( function*(){}).constructor; console.log(create); // function GeneratorFunction() {[native code]} const sprots = new create("one", "yield one;"); console.log(typeof sports); // function const obj = sports(100); console.log(obj.next(); // {value: 100, done: false} /* 1. create = (function*(){}).constructor; - 제너레이터 함수를 생성하는 - constructor(생성자)를 할당 함 2. constructor가 할당되므로 - new 연산자로 생성자 함수를 호출할 수 있음 3. console.log(create); - function GeneratorFunction() {} 출력 - function 오브젝트 형태 4. sports = new create(param) - GeneratorFunction을 사용하여 제너레이터 함수를 생성하고 sports 변수에 할당 함 - param 에 파라미터와 함수 코드를 작성 one: 파라미터 이름, yield one: 함수 코드 5. console.log(typeof sports) - new 연산자를 사용했는데 - sports가 Object가 아니라 function임 6. function이라는 것은 - function* sports() 로 제너레이터 함수를 선언한 것을 뜻함 - 즉, 지금까지 제너레이터 함수를 선언하는 처리를 한 것 7. const obj = sports(100); - 제너레이터 함수를 호출 함 - 제너레이터 오브젝트 생성, 반환 - 함수 코드를 실행하지 않음 - 100이 one에 매핑 됨 8. obj.next() - 제너레이터 오브젝트는 이터레이터 오브젝트이며 - obj에 이터레이터 오브젝트가 할당되어 있으므로 - `next()`를 호출 할 수 있음 - {value: 100, done: false} 출력 */