4월, 2011의 게시물 표시

Javascript OOP - Prototype

prototype 이란 자바스크립트에 존재하는 모든 객체가 가지고 있는 속성이다. 빈 객체도 기본적으로 [[prototype]] 을 가진다.  (* [[prototype]] 은 internal property) 간단하게 확인하는 방법 구글 크롬을 실행해서 '개발자 도구'를 연다. 그리고 Console 창에 new Object() 라고 입력한 뒤 실행한다. 빈 객체지만 __proto__ 속성이 있는걸 볼 수 있다. * [[prototype]]이 어떻게 정의되어 있는지는 브라우저마다 다를 수 있다. Prototype 에 메쏘드 정의하기 function enlarge() { this.width *= 2; this.height *= 2; } // 생성자 함수 function Rectangle(w, h) { this.width = w; this.height = h; } //prototype에 정의 Rectangle.prototype.enlarge = enlarge; var rect = new Rectangle(100, 200); rect.enlarge(); // 모든 인스턴스에서 공유된다. 브라우저에서 지원하는 기본 내장 객체에 대해서도 prototype에 속성을 추가하거나 삭제할 수 있다. 익스플로어의 경우 배열 객체에 unshift 메쏘드가 없는데 아래 소스 코드는 unshift  메쏘드를 추가해서 다른 브라우저와 호환이 되게 한다. if(!Array.prototype.unshift) { // 객체 탐지 Array.prototype.unshift = function () { this.reverse(); var a = arguments, var i = a.length; while(i--) { this.push(a[i]); } this.reverse();

How to copy a list in Python

members = ['dog', 'cat', 'horse'] clones = members[:] Another way is clones = list(members)

Javascript OOP - 객체 생성 방법 2

객체를 생성하는 또 다른 방법은 생성자(constructor)를 사용하는 것이다. 객체가 하나만 필요할 경우 객체 리터럴을 사용해서 생성하면 되지만 여러개의 객체 인스턴스가 필요한 경우라면 객체 생성자 함수(Object Constructor function)를 사용해야 한다. 객체 정의하기 function Rectangle() {     this.width = 100;     this.height = 200; } 초기화 파라미터를 사용해서 인스턴스를 초기화할 수도 있다. function Rectangle(w, h) {     this.width = w;     this.height = h; } 메쏘드를 정의해서 객체에 삽입해 보자. function enlarge() {     this.width *= 2;     this.height *= 2; } function Rectangle(w, h) {     this.width = w;     this.height = h;     this.enlarge = enlarge;     this.area = function () {         return this.width * this.height;     }; } new 키워드를 사용해서 객체의 인스턴스를 생성해 보자. var r = new Rectangle(100, 200); r.enlarge(); r.area(); /* return 80000 */ 여기서 new가 동작하는 방식은 자바의 new와는 다르다. new는 먼저 빈 객체를 생성한다. 그리고 뒤 이어 나오는 객체의 생성자 함수를 호출해서 this가 생성된 인스턴스를 참조하게 한다.

About XHP and how to install on Mac OS X

XHP란 Facebook에서 개발한 PHP Extention이다. 자세한 설명은 아래 링크 참조..^^ http://durl.kr/772rm   XHP를 사용하면 첫째, 가독성이 좋은 PHP코드를 개발할 수 있다. 예를 들면 <?php if ($_POST['name']) { ?>     <span>Hello, <?=$_POST['name']?>.</span> <?php } else { ?>     <form method="post">     What is your name?<br>     <input type="text" name="name">     <input type="submit">     </form> <?php } 보통 이렇게 프로그래밍 하게 되는데 빨갛게 표시한 부분 때문에 머리가 아프다. 하지만 이것을 XHP를 사용해서 개발하면 아래처럼 된다. <?php // note: includes omitted if ($_POST['name']) {   echo <span>Hello, {$_POST['name']}</span>; } else {   echo     <form method="post">       What is your name?<br />       <input type="text" name="name" />       <input type="submit" />     </form>; } echo문을 사용해서 가독성이 많이 좋아 졌다. XHP가 HTML 문법을 이해할 수 있기 때문에 가능하다.

Javascript OOP - 객체 생성 방법 1

객체를 생성하는 가장 쉬운 방법은 객체 리터럴을 사용하는 것이다. var book = {title:'Javascript', price:30000}; 객체 리터럴은 자바스크립트 표현식으로 평가될 때마다 새로운 객체를 생성하고 초기화한다. 객체 프로퍼티 값에 접근하기 위해서는 마침표(.) 연산자를 사용한다. book.title; 자바스크립트 객체는 연관 배열이기 때문에 아래처럼 프로퍼티에 접근할 수도 있다. book['title']; 프로퍼티 이름을 문자열로 표현함으로써 아래와 같은 구문이 가능하다. for(i = 0; i < 10; i++) {      addToBookShelf(book[seriesName + i]); } 이런 접근 방식은 프로퍼티 생성, 삭제에 있어서 매우 유연성 있게 처리할 수 있다. 이것은 Java나 C++ 등 타입 제약이 엄격한 프로그래밍 언어에는 불가능하지만 자바스크립트는 타입 제약이 느슨하기 때문에 이러한 접근 방식이 가능하다. 자바스크립트 객체는 연관 배열(associative array)이기 때문에 프로퍼티들을 열거할 수 있다. (연관 배열은 key와 value가 쌍으로 이루어진 데이터라는 점에서 HashMap 또는 Dictionary와 같다.) for(var property in book) {     console.debug(property); } Object() 생성자를 사용하면 빈 객체를 생성할 수 있다. (생성자에 대한 자세한 내용은 다음에..) var book = new Object(); 이렇게 생성된 빈 객체에 프로퍼티를 동적으로 설정할 수 있다. book.title = 'Javascript'; book.price = 20000; book.sale = function () {     return book.price * 0.9; }; sale 함수는 아래처럼 호출할 수 있으며 리턴값은 18000이다. book.sale(); 객체는 중첩될 수