패왕넷 을 통해 알게된 "개체 지향 기술을 이용한 고급 웹 응용 프로그램 만들기" 를 읽다 보니 몇가지 추가하고 싶어졌다.

"AJAX in Action" 책을 보면 뒤에 부록B에서 이부분을 다루고있다.

언급한 글에서 '자바스크립트는 사전입니다'라는 대목은 Dictionary Object 라는 뜻일 것이다.(아마도)직역을 하다보니 저렇게 된듯한데... AJAX in Action 에서는 배열이라고 표현했다.
자바스크립트의 배열은 일반배열과 딕셔너리형(키/값이 쌍인..)배열을 모두 지원한다.
즉 배열을 인덱스로도 접근가능하고 키로도 접근 가능하다는 것이다.
또 재미있게 키값은 oop 프로그래밍에서 속성을 접근하는 것같은 문법으로 접근이 가능하다.


 JSON 사용하기

  • 자바스크립트의 배열 new Array() 는 [ index ] 방식과 ['name'] 방식(키/값 쌍)을 모두 지원한다.
  • 일반배열은 [] 로, 키/값 형태는 {} 를 사용하면된다.
  • {} 형태에서 키값에 공백을 포함 시키려면 "" 로 묶어주면 된다.

           
    "best sller " : "test"

  • 자바크립트는 인터프리터 언어이기 때문에 해당 문자열을 만나면 바로 객체로 변환된다.
  • 날짜형의 경우 new Date() 를 바로 사용해도 된다.

          
    "createDate":new Date(2007,04,05),
  • 더 재미있는 건 동적인 값 할당이 가능하다는 것인데

        
    title : "test ver " + verNum ,
    price : getPrice(),
    sum : function (){}
    위와 같은 코드도 가능하다.
    여기서 title 은 + 로 연결된 문자열을 , 가격은 getPrice 함수의 결과가 할당된다.
    또한 sum 이라는 멤버는 함수로 기능한다.


생성자,클래스,Prototype


  • 자바스크립트에서 function 은 단순히 함수가 아니라 객체로 받아들여야 한다.
    실제 function 의 정의는 함수라기 보다 fuction 객체의 생성자 이다.

  • function 을 사용한 객체의 정의에서 내부 함수 정의를 사용하면 [http]의도하지 않은 클로저 문제가 발생할 수 있다.
    또한 불필요한 내부함수 객체가, new 로 객체를 생성할 때 마다 생성되므로 메모리 누수가 발생할 수 있다.
        
    function testObj()
    {
    tellSomething=function (){};
    }
    var test=new testObj() : 내부적으로 tellSomething 이 만들어진다.
    이를 해결하는 방안으로 prototype 을 사용하는 방법이 있다.

  • 프로토타잎은 자바스크립트만의 특징이다.
    프로토타잎으로 정의한 멤버들은 객체 생성시 자동으로 추가되며, 메소드의 경우 하나의 함수를 가르키게 된다.
    프로토 타입에서의 this 키워드는 생성된 객체를 가르킨다.

  • 프로토타입은 생성메소드(생성자)를 정의한 후에 사용가능하다.(순서주의)
  • 실행도중 프로토타잎을 임의로 변경할 수 있다.변경하지 전에 생성된 객체도 변경된 프로토타잎에 영향을 받는다.

"개체 지향 기술을 이용한 고급 웹 응용 프로그램 만들기"에서는 closure 를 '차단' 이라고 번역한듯 하다. 클로저(차단) 기능을 이용해 전역 변수로 사용하는 방법, 객체의 멤버처럼 이용하는 방법등을 소개하고있다.

자바스크립트 리플랙션


어릴적 자주쓰던 필살기...'반사'..리플렉션이란 물체에 광선이나 파장을 보내 반사된 정보를 분석해 물체를 파악하는 것처럼(레이더 처럼)
객체의 내부 속성이나 메소드 정보를 알아오는 기술이다.

간단한 속성 확인방법


   
if (typeof(MyObject.someProperty)=='undefined') {...}

instanceof 사용시 주의사항

  • instanceof 는 객체형을 반환한다.
  • JSON 으로 구성된 객체는 Object 아니면 Array 뿐이다.
  • 내장객체는 상속을 받으므로 가장 상위 클래스는 Object 이다.
    따라서 Object 인지 검사하는 과정은 제일 마지막에 수행해야 한다.(Array 도 Object 에서 상속받는다.)

  • if (MyObj instanceof Array) { }
    else if (MyObj instanceof Object) { }
    ...
    if (myObj instanceof MyObject) {..}

객체의 모든 속성과 메소드 찾아내기


for (var i in myObj)
{ alert(myObj[i]); }












너무많다...나중에 더 추가해야겠음..
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback Address :: http://steelleg.tistory.com/trackback/7 관련글 쓰기

댓글을 달아 주세요