자바스크립트(ECMAScript 5) 객체의 공용 멤버와 공용 메소드는 다음과 같이 만드는 것이 일반적인 것 같다.


var A = function(name) {
   console.log("constructor A.");
   this.name = name; //공용 멤버
}
A.prototype = {
   who: function() { //공용 메소드
       console.log("I'm "+this.name);
   },
};


즉 공용 멤버는 생성자 함수 안에서 this 키워드로 만들어지고 공용 메소드는 prototype 객체 안에 정의한다.


 이제 이렇게 생성된 객체 A를 상속해서 새로운 객체 B를 정의하는 방법을 알아보자. 상속이란 기존 객체의 모든 공용 멤버를 복사하여 그대로 사용하면서 거기에 새로운 멤버나 메소드를 추가하는 방식으로 객체를 재사용하는 방법이다. 여러 방법 중에서 ECMAScript5 에서 도입된 Object.create() 함수를 사용하는 일반적인 방법은 다음과 같다.


var B = function(name, age) {
   console.log("constructor B.");
   A.call(this, name); // (1)공용멤버를 상속(복사)한다.
   this.age = age; // 새로운 멤버 추가
}
B.prototype = Object.create(A.prototype); //(2)공용메소드를 상속(복사)
B.prototype.constructor = B; //(3)생성자를 복원한다.
B.prototype.who2 = function() { // 새로운 메소드 추가
   console.log("I'm "+this.age+" years old.");
}


위에서 보면 세 가지 단계가 필수적이다.


(1) 공용 멤버를 상속(복사)하기 위해서 생성자 함수 내부에서 A.call() 함수나 A.apply()함수를 호출하여 공용 멤버들을 복사하는 단계

(2) 공용 메소드들을 복사하기 위해서 Object.create() 함수를 호출하는 단계

(3) 생성자를 복원하는 단계


만약 상속받는 객체의 생성자 함수의 인자들과 원 객체의 생성자 함수 인자들이 동일하다면 A.apply() 함수를 이용하여 인자 전체를 넘긴다.


A.apply(this, arguments);


그렇지 않고 일부만 선택적으로 사용한다면 예제와 같이 A.call()함수를 사용할 수 있다.





Posted by 살레시오
,

 자바스크립트에서 불리언 결과가 false로 판명되는 것들은 다음과 같다.


  • undefined, null

  • NaN

  • 0 (숫자 리터럴) , -0

  • “” (빈 문자열)

  • false


주의할 점은 빈 문자열은 false 이지만 빈 배열, 빈 객체는 true라는 것이다.


> Boolean("")
false
> Boolean([])
true
> Boolean({})
true


그리고 NaN은 그 자신과 같지 않은 유일한 자료형이다.


> undefined == undefined
true
> null == null
true
> NaN == NaN
false


논리 or (||) 연산자를 이용하여 자바스크립트에는 지원하지 않는 default parameter 를 구현할 수 있다.


function func(a) {
  if (a == undefined) a = 1; //(*)
  ...
}


위와 같이 하면 func(0)이라고 호출하면 변수 a는 사용자가 지정한 대로 0값을 가지지만 func() 라고 호출해도 내부 변수 a는 1값을 가지게 된다.


 루아 프로그래머는 위의 (*)를 다음과 같이 더 간단하게 할 수 있지 않느냐고 생각할 지 모른다.


a = a || 1


하지만 func(0) 으로 호출하면 a는 내부적으로 1로 바뀌어 버린다. 0은 false로 간주하기 때문이다. (루아에서는 숫자 0은 true이다.) 주의해야 한다.




Posted by 살레시오
,

 자바스크립트 파일을 컴파일하여 (단일) 실행 파일을 생성하려면 enclose 를 이용한다.



설치는 다음과 같이 한다.


npm install -g enclose


기본적으로 -o 옵션으로 출력파일을 지정해 줄 수 있다.


enclose -o 출력파일 소스파일


그리고 --loglevel 옵션으로 정보 출력 단계를 조절할 수 있다.


한 줄짜리 간단한 js프로그램도 이것으로 실행 파일을 만들어보면 10M 가까운 용량을 차지한다. 외부 라이브러리가 사용되었다면 그것까지 포함되기 때문에 용량을 더 늘어난다. 하지만 js파일을 간단하게 윈도 실행 파일로 변환할 수 있다.

Posted by 살레시오
,

 Koding에서 node.js 를 이용하여 http서버를 실행시킬 수 있으며 외부에서 접속도 가능하다. 다음과 같이 작성한 후 적당한 이름(test002.js)로 저장한다.


var http = require('http');

var server = http.createServer(function (req, res) {
 res.writeHead(200, { 'Content-Type' : 'text/plain' });
 res.end('Hello nodejs');
});

server.listen(8000);


이제 터미털에서 다음과 같이 실행한다.


$node test002.js


그러면 http 서버가 동작하기 시작한다. 외부에서 접속하려면 브라우저에서 다음과 같은 주소를 입력하면 된다.


http://hostname.koding.io:8000


자신의 hostname은 터미널에서 hostname 명령어로 알 수 있다.



만약 arduinoharp라면 다음과 같이 주소를 입력한다.


http://arduinoharp.koding.io:8000


그러면 ‘Hello node.js’라는 문자열이 브라우저에 표시될 것이다.





Posted by 살레시오
,