1)
javascript 의 prototype 은
구현(?)하자면 좀 길다는 생각이 들어서요

그걸 줄여봤습니다..

참고 : JavaScript Patterns ISBN 978-89-6626-015-7

...

2)

<div id=output120329_1>결과</div>

<script>

function function120329_1() {

  var a = {b: 1}, c, d
// 삭제
//    , f; 삭제//

    ;
  (c = function() {}).prototype = a;
// 삭제
//  (function e() {}).prototype = a; 삭제 //

  d = new c();
// 삭제
//  f = new e(); 삭제 //

  document.getElementById('output120329_1').innerHTML = d.b
// 삭제
// + ' ' + (e?e.b:'undefined') + ' ' + f.b; 삭제 //

  + ' ' + c.b;

}

function120329_1();

</script>


...

3)

결과


...

4)
함수를 괄호로 감아(?)서, prototype 값을 변경할 수 있도록 하고, 변경한다..라는 방법이죠.
함수 앞뒤로 () - 괄호가 있습니다만.. 없으면 함수를 지정하지 못할 수도 있어서요..

예전에 설명한 prototype 과 별다른 차이가 없습니다.
그냥, 선언하는 방법이 이렇다는 것을 예제로 보여준 거죠.

prototype 설정부분 검증(?)이 길어서 그렇습니다만..
d 를 사용할 때 까지만 본다면 


a={b: 1}; 
(c=function() {}).prototype=a;
d=new c();


요만큼이죠.

...

물론, 더 줄이면


(c=function() {}).prototype={b:1};
d=new c();


이렇게

// 틀린부분
나, 혹은 f 를 사용할 때 처럼


(function e() {}).prototype={b:1};
f=new e();


이렇게도
틀린부분 //

되겠습니다만..

코드가 길어지면
가독성이나 선언문 설정에 좀 어려움이 있을 것 같습니다.

...

5)
prototype 은 new 라는 연산자가 붙어
function 이 object 를 만들 때 제 몫을 하는 거라서요..

new 를 사용해 object 값을 받은 d // 틀린부분 와 f 틀린부분 // 에는 prototype 이 적용 됐지만,

// 교정
함수 선언문인 e 에는 prototype 선언은 할 수 있어도, prototype 룰 적용은 안되어 있는거죠.
그래서, e.b 만 undefined 가 된겁니다.
교정 //

함수 선언문인 c 에는 prototype 선언은 할 수 있어도, prototype 룰 적용은 안되어 있는거죠.
그래서, c.b 만 undefined 가 된겁니다.

6)
.. 함수의 특성상,
new 라는 연산자를 생략하는 방법도 가능은 합니다만..
(스스로 호출하는 생성자 - JavaScript Patterns ISBN 978-89-6626-015-7 )

.. 뭐, 필요하다면, 이렇게 스크랩 해와야겠군요..


function Waffle() {
  if (!(this instanceof Waffle)) return new Waffle();
  /* 이후, 함수 내용 들어갈 자리.. */
}


대충 이렇댑니다..

easyBow killofki@.

ps..
// 삭제
e.b 를 (e?e.b:'undefined') 로 바꿨습니다.
IE8 에서는 오류가 나지 않지만, 다른 브라우져에서는 모두 오류가 나네요.
삭제 //


..라고 적었는데, e 함수 자체가 인식이 안되는 오류였네요.
전에도 그때문에 내용을 작성하다 말았는데, ..

.. 결국, 전체적으로 긴급 수정했습니다.
'12.06.05 01:00 수정..

Posted by killofki
,