1)
이전 내용에 이어, Array 내용까지 이어가봅니다.

출력된 내용은,
String 과 Array 객체에 [print]() 가 실행되면서
처리되는 내용들입니다. 

*참고* 이전 내용..
2012/11/30 - [baseJavascript] - String].. 객체에 접근하는 함수 선언 테스트입니다. 

...

2)

<script>

// string prototype setting..

( function() {

// can do outer string... as language C 's header.. but(?), must within function sentence for compress..

var
  prototype='prototype'
  , print='print120901_2'
  , replaceAppend='replaceAppend120901_2';

// end of can do outer string


function sp(v, w) { String[prototype][v]=w; }
function ap(v, w) { Array[prototype][v]=w; }

// String.prototype.w=function() { var ar=arguments, arl=ar.length, i; for (i=0; i<arl; i++) document.write(ar[i]); };

sp(print, function() { document.write(this); return this; } );
ap(print, function() { document.write(this.join('.')); return this; } );

sp(replaceAppend, ( function() {

// for single process.. if try multi process as .replaceAppend(.replaceAppend()) , maybe stop by var i..
// if want to multi process, move 'var ..' into return function..
  var
    regV=/ /g, i, ar, arl, ov;

  return function() {
   arl=(ar=arguments).length; ov=this;
   for (i=0; i<arl; i+=2) { // reason of can not multi process : i=0
      regV.compile(ar[i], 'g');
      ov=ov.replace(regV, ar[i+1]);
      }
 
    return ov;
    }; // setting function
  } )() );

})();

// end of string prototype

(function() {

var
//  prototype='prototype'
  print='print120901_2'
  , replaceAppend='replaceAppend120901_2';

  var
//    n=parseInt(prompt("몇개?", "3"))
    n=parseInt('3')
    , aa=[]
    , i
    , oo=[];

  function printaa(v) {
    return '{value}'[replaceAppend]('value', v.join(","))[print]();
    }

  function printaas(v) {
    var i, ov=[];

    for (i=0; i<v.length; i++) {
      ov[i]=printaa(v[i]);
      }

//    return '{ '+ov.join(' , ')+' }<'+'br/>';
    return ('{ value }<'+'br/>')[replaceAppend]('value', ov.join(' , '))[print]();
    }

  for (i=0; i<n; i++) aa[i]=i;

  oo[0]=aa;
  oo[1]=[3,4,5,6];
  oo[2]=[7,8];
  oo[3]=[[9],10];

  printaas(oo);

  printaa(oo);
  oo[0][print]();
  oo[1][print]();

  }
)();
</script>




...

3)




...

4)
과정은

String 을 위해 function sp(), Array 를 위해 function ap() 에서
prototype 선언을 하도록 도와주고

(실제로는, .bind 라는 함수를 (선언해서?) prototype 에 연계하도록 많이 쓴다고 알고있습니다..
끌고오기도 복잡할 것 같아서 생각나는대로 따로 만들었죠..)

String, Append 에 각각 [print] 라는 함수를 추가하고, (document.write 로 넘기고, 넘겼던 값도 반환하도록 했죠)

String 에는 [replaceAppend] 라는 함수를 추가하고,

테스트용으로는 oo[0] 에 들어갈 aa[] 의 값 갯수를 조정할 수 있도록 했습니다만,
.. 일단 생략했구요 (팝업이 뜨니까요..)

이후 값들은 임의로 몇개 더 추가했습니다.

printaas 에 들어가면,
printaa 는 [print]() 에 넘기고(인쇄하고, 값도 넘기죠..)
printaas 도 [print]() 에 넘기죠. (<br/>을 포함하긴 해두요..)

.. 여기까지가 첫줄 표시된 내용입니다.

둘째줄부터 보면,
printaa 만으로(?) oo[] 를 찍은 내용이 먼저 나오는데요, 죄다 연결되어있죠.
이건 .join(',') 이 만난 Array 를 묶으면서 
하위 Array 까지 죄다 묶어서 생기는 현상입니다.

.. 그 이후(?),

Array 의 [print] 함수로 직접(?) 출력하는 부분이 있죠.
.. 뭐, 결과는 보시는 것과 같습니다.

두번 출력하는 것이라 2 와 3 사이에 간극이 없는 것이 정상이죠.

...

5)
추가로 체크할 부분은,

[replaceAppend] 와 [print] 를 쓸 수 있도록(?)
대표값(블로그에 적는 내용이라, 날짜특징을 넣습니다..)을 다른 함수에 전달(?)했는데요,
.. 보통은, library 쪽에서 이름 받아서 쓰죠..?

그정도로 구현 할 수 있다면 될 것 같네요.

easyBow killofki@.

Posted by killofki
,