티스토리 뷰
728x90
반응형
function을 new하는 메소드는 어떻게 생겼을까?
Source if(typeof Object.create !== 'function'){ var Object = function(o){ return { create:function(){ var F = function(){}; F.prototype = o; return new F(); } } }; } Function.prototype.kkk = function() { var that = Object.create(this.prototype); var other = this.apply(that, arguments); return (typeof other === 'object' && other) || that; }; function add() { return "aaa"; } var a = add.kkk(); alert(a); |
kkk() 메소드 설명 Function.prototype.kkk = function() { var that = Object.create(this.prototype); //kkk를 호출하는 function이 this가 된다. that은 this의 prototype이 가리키는 object를 바라보는 새로운 빈 object가 된다. var other = this.apply(that, arguments); //this //other 는 kkk를 호출했던 function을 실행시키다. return (typeof other === 'object' && other) || that; //null은 falsy를 의미함. 따라서 여기서의 조건은 function을 호출한 값의 type이 object인지 그리고 그 값이 null인지 체크하는 것이다. }; 만약에 리턴 값이 object가 아니라면 무조건 새로 만들어진(그전 function을 hidden link로 가리키고 있는) object 를 넘기게 되는 것이다. |
반응형
'IT > JavaScript' 카테고리의 다른 글
LET/CONST는 호이스팅이 안된다? (0) | 2022.05.04 |
---|---|
구조 분할 할당 (Destructuring assignment) (0) | 2022.03.23 |
Javascript String 속도 비교 (0) | 2012.08.10 |
function(){} ();에서 ();의 의미 (0) | 2012.08.10 |
[Javascript] This 의 영역 정의 (1) | 2012.08.10 |
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 캐나다
- 부모님초청이민
- 정착서비스
- 밀튼
- 인터넷
- basement
- 토론토
- git proGit
- 온타리오
- RHEL
- 벌링턴
- Jay
- TORONTO
- 옥빌
- Canada
- 토론토정착서비스
- docker
- certification
- BTBS
- 우드워킹
- redhat
- Certificate
- BC주
- 부동산분석
- RHCE
- 미시사가
- Red Hat
- 캐나다부동산
- ansible
- cert
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함