lua로 만들어진 데이터를 익숙한 json 데이터로 변환해서 사용해보고 싶었다. 그러려다 보니 lua data를 가져와 json으로 변환하는 과정을 lua 스크립트로 작성해야 했다. 그 내용을 기록해 본다. lua 소개 https://www.lua.org/ lua는 가벼운 명령형/절차적 언어로 확장 언어로 쓰일 수 있는 스크립팅 언어를 주목적으로 설계되었다. 포르투칼어로 "달"을 의미하는 단어라고 한다. C/C++과 같이 쓰기 좋아서 앵그리버드, 월드 오브 워크래프트, 로블록스, 네버윈터 나이츠, 문명 V 등등 다양한 게임에서 UI나 config 설정을 관리하는 용도로 많이 쓰인다고 한다. lua 설치하기 https://www.lua.org/download.html window에서 사용하려고 하였는데 다..
두 라이브러리는 객체에 대한 확장을 지원한다. a라는 이름의 객체가 있다고 하면 (new를 사용하건 JSON이건간에) 다음과 같이 a객체를 확장한다. prototypejs의 경우 prototype이란 이름에 걸맞게 Object에 extend를 구현하여 apply 함수를 통해 확장을 지원한다. Object.extend(a, 확장객체); jQuery의 경우 $ 셀렉터에 선언된 extend 함수를 통해 확장을 지원한다. $.extend(a, 확장객체); 확장 객체는 원하는 대로 사용하면 된다. //일반 객체의 경우 function B() { this.bValue = "값"; this.bMethod = function() { return "메소드결과"; }; } //위 생성자 함수에 대한 생성객체인 new B(..
constructor는 객체를 만드는 기능함수를 반환하거나 설정을 하는 메소드이다. 아래와 같이 어떤 함수에 대해 function A() { document.writeln("a함수"); } document.writeln(A.constructor); 호출한 결과는 아래와 같다. function Function() { [native code] } constructor는 객체를 만드는 기능 함수를 반환하므로 object로 된 JavaScript의 모든 요소들이 다 가지고 있다. 예를 들어 아래와 같이 Object를 생성하게 되면 var a = new Object(); document.writeln(a.constructor); 호출한 결과는 아래와 같다. function Object() { [native cod..
자바스크립트에 메소드 오버로딩이 없는 것과 마찬가지로 클래스 상속 또한 없다. 하지만 구현은 가능하다. JSON의 창시자로, JavaScript The Good parts의 저자로 유명한 Douglas Crockford가 구현한 소스이다. 원글 : http://javascript.crockford.com/inheritance.html 이 소스의 분석을 시작하기 전에 먼저 말해야 할 것이 있다. 이 코드를 제안한 Crockford 마저 버린 소스라는 것이다. -ㅅ-;;; 프로토타입적이고 함수적인 JavaScript의 소스에서 클래스 상속을 구현하긴 했지만 실제로 자신조차 사용하질 않는다고 말미에 달아놓은 소스이다. 하지만 JavaScript를 공부하기엔 좋은 예제이다. 이 소스를 이해하게 되면 protot..
기본 데이터 형식 JavaScript에는 데이터 형식으로 아래의 형식이 있다. 기본 형식 String Number Boolean 합성(참고) 형식 Object Array 특정 형식 null undefined이중 null과 undefined라는 특정 형식이 늘 사람을 혼란스럽게 만든다. null null은 보통 객체 타입의 특수한 값, 즉 어떠한 객체도 나타내지 않는 값으로 취급된다. null은 다른 모든 값들과 구분되는 고유한 값이다. 어떤 변수가 null값을 가지면 그 변수는 기본 형식(String, Number, Boolean)이나 합성 형식(Object, Array)의 값을 담고 있지 않다는 것을 의미한다. 따라서 어떤 변수의 값을 초기화 하고 싶을 경우엔 null을 사용한다. var a = "문자..
JavaScript는 메소드 오버로딩이 없다. 매개변수의 갯수나, 속성, 리턴값의 일치여부를 체크하지 않는다. 함수를 선언하고 해당 함수가 호출되기 전 동일 네임의 함수가 다시 선언되는 경우 그대로 덮어쓴다. 하지만 메소드 오버로딩의 구현은 가능하다. 이를 구현한 소스가 있다. 자바스크립트의 전도사로, jQuery의 개발자로 유명한 John Resig의 소스이다. 원글 : http://ejohn.org/blog/javascript-method-overloading 아래와 같다. // addMethod - By John Resig (MIT Licensed) function addMethod(object, name, fn){ var old = object[name]; object[name] = functio..
JavaScript로 구현한 소스 중 눈에 띄는 소스를 소개합니다. jQuery를 이용한 fisheye menu : http://www.ndesign-studio.com/blog/design/css-dock-menu/ JavaScript만을 이용한 fisheye menu : http://eudock.jules.it/index-eudock2.0.php 정말 멋진 JavaScript 소스 중 하나. 현재 이 블로그의 아래에 달린 RSS 구독 아이콘에 적용된 것이 바로 fisheye menu 입니다. 아이콘의 출처 : http://krang.tistory.com/378
prototype 속성은 객체에 새로운 속성이나 메소드를 추가할 때 사용한다. 그냥 추가하면 되는데 왜 prototype이란 개념이 있을까? '함수의 호출 - 3. 생성자 호출 패턴'에서 사용한 호출 구문을 보자. var A = function(string) { this.aValue = string; this.getValue = function() { return this.aValue; } } var a = new A("a의 값"); document.write(a.getValue()); 예제1. 생성자 A는 aValue라는 속성과, getValue라는 메소드를 가지고 있다. 위에서 선언한 A 생성자를 prototype을 이용하면 다음과 같다. var A = function(string) { this.aV..
브라우저는 처음 호출된 페이지의 반복성 파일들(image파일, js, css파일)을 사용자의 로컬 디스크에 임시 인터넷 파일로 저장하고 재 호출시에 저장된 파일을 불러들여 사용하게 된다. 매번 같은 파일을 다운로드해야하는 불편함을 줄여주는 좋은 기능이지만 만약 js파일이 시시각각 달라지는 내용을 담고 있는 경우 호출을 어떻게 해야할까? 이런 경우 파일의 뒤에 요청하는 파라메터의 값을 매번 바꾸어주면 된다. 위의 코드가 너무 길다면 아래와 같이 써도 무방하다. "); d라는 이름의 파라메터로 매번 변하는 시간을 값으로 요청을 하면 매번 브라우저는 js파일을 새롭게 갱신하게 된다. 굳이 파라메터의 이름이 d일 필요는 없다. 주의해야 하는 점은 위와 같이 사용한 경우 아래와 같이 브라우저는 인식하게 된다. 따..
변수의 선언 변수를 사용하기 전에 변수를 먼저 선언하는 것이 원칙이며, 변수를 선언할 때는 var 키워드를 사용한다. 선언되지 않은 변수를 사용할 수 없다. 함축적 선언 변수를 명시적으로 선언하지 않더라도, 변수명에 값을 할당하면 변수가 동시에 선언되는 것으로 처리된다. 초기값 변수를 선언하고 값을 할당하여 초기화 하지 않았을 경우, 변수를 호출하면 undefined 값을 갖게 된다. var a =10; var c = a*b; //'b is not defined' 오류 발생 따라서 특정 값을 지정하지 않고 변수를 선언하여 초기화 할 때는 그 변수에 초기값을 할당해야 한다. 아래 4가지 경우를 보자. var b = "가나다" + a; var c = 4 + a + 5; document.writeln(a); ..