제가 현재 웹프로그래머이긴 하나 html이나 script 코딩 능력이 너무 부족하여 언제나 주먹구구식 코딩을 하거나 server에서 처리해버리지요.
비록 javascript 고수는 아닙니다만 아래에 제가 사용하는 코드들의 일부를 보여드리겠습니다.
어렵지 않으리라 생각되는데 클래스화, 오버라이딩과 유사한 기존 클래스에 메서드 추가, 사용자 정의 예외클래스등의 예제입니다.
소스를 이해하시면 아이디어를 떠올리는데 도움이 될 것 같습니다.
그리고 미리 밝혀드리지만 거의 대부분 남의 소스를 참고한 것들입니다.
명료한 해답은 아니겠지만,, 솔직히 괜찮은 javascript 소스나 예제는 서로 공유했으면 하는 바램에 이 글을 썼습니다. :)
// 클래스화 예제
// Class
function cgiRequest(EXECUTE_CGI_URL)
{
// set some default variables
this.parms = new Array();
this.parmsIndex = 0;
// set the server url
this.server = EXECUTE_CGI_URL;
// methods
this.execute = cgiRequestExecute;
this.add = cgiRequestAdd;
this.addById = cgiRequestAddById;
}
// method
function cgiRequestAdd(name, value)
{
// add a new pair object to the params
this.parms[this.parmsIndex] = new Pair(name, value);
this.parmsIndex++;
}
function cgiRequestAddById(id)
{
this.parms[this.parmsIndex] = new PairById(id);
this.parmsIndex++;
}
function cgiRequestExecute()
{
// set the server to a local variable
var targetURL = this.server;
// try to create our XMLHttpRequest Object
try
{
//var httpRequest = new XMLHttpRequest();
var httpRequest = new ActiveXObject("MSXML2.XMLHTTP.3.0");
}
catch(e)
{
alert("Error creating the connection!\n\n" + e.description);
return false;
}
// make the connection and send our data
try
{
var txt = "";
for(var i in this.parms)
{
/*
if(txt.length)
{
txt = txt + '&';
}
txt = txt + this.parms[i].name + '=' + this.parms[i].value;
*/
if(i == 0)
{
txt += this.parms[i].name + "=" + this.parms[i].value;
}
else
{
txt += "&" + this.parms[i].name + "=" + this.parms[i].value;
}
/* } */
}
// GET
// alert(targetURL + '?' + txt);
httpRequest.open("GET", targetURL + '?' + txt, false, null, null);
httpRequest.send('');
// POST
// httpRequest.open("POST", targetURL, false, null, null);
// httpRequest.setRequestHeader("Accept-Language","ko");
// httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// httpRequest.setRequestHeader("Content-Type", "text/html; charset=euc-kr");
// httpRequest.setRequestHeader("Content-Length", txt.length);
// httpRequest.send(txt);
}
catch(e)
{
alert("An error has occured calling the external site: " + e);
return false;
}
// make sure we received a valid response
switch(httpRequest.readyState)
{
case 1,2,3:
alert("Bad ready state: " + httpRequest.status);
return false;
break;
case 4:
if(httpRequest.status != 200)
{
alert("The server respond with a bad status code: " + httpRequest.status);
return false;
}
else
{
var response = httpRequest.responseText;
/*
try
{
var s = new XMLSerializer();
var response = httpRequest.responseXML;
var str = s.serializeToString(response);
}
catch(e)
{
alert(e); return;
}
alert(str);
*/
}
break;
default:
alert("Unknown error.");
break;
}
return response;
//return str;
}
// utility Pair class
function Pair(name, value)
{
this.name = name;
this.value = value;
//alert("name: " + this.name + "\n\nvalue: <" + this.value + ">");
}
function PairById(id)
{
this.name = id;
//alert(id);
//
this.value = document.getElementById(id).value;
if(document.getElementById(id).value)
this.value = document.getElementById(id).value;
else
this.value = " ";
//
//alert("name: " + this.name + "\n\nvalue: <" + this.value + ">");
}
// 기존 클래스에 메서드 추가
String.prototype.trim = function() {
// Use a regular expression to replace leading and trailing
// spaces with the empty string
return this.replace(/(^\s*)|(\s*$)/g, "");
}
// 사용자 정의 예외클래스
function createException(msgNum, msgText)
{
this.messageNumber = msgNum;
this.messageText = msgText;
}
// 사용예
function fpIsValidDateRpt(spr, src, col)
{
var desc = spr.GetValue(spr.ActiveRow, col);
var yymm = src.replace(/-/g, "").substring(0, 6);
var yymm1 = desc.replace(/-/g, "").substring(0, 6);
if(yymm != yymm1)
{
fpInvalidCol(spr, 1, col);
throw new createException(1, "입력하신 날짜는 보고기간에 포함되지 않습니다. 보고기간내 일자를 입력하십시오.");
}
fpInvalidCol(spr, 0, col);
}
// 위 함수의 사용예
try
{
fpfpIsValidDateRpt(...);
}
catch(e)
{
alert(e.messaageNumber + ':' + e.messageText);
}
finally
{
...
}
특히 firefox 같은 mozilla product들은 웹페이지에서 사용하듯이 어플리케이션 자체의 행동을 많은 부분은 javascript등으로 scripting 하므로 script 개발에 유용한 툴들을 많이 제공하고, 소스를 들여다 보셔도 도움이 될 부분이 많이 있을 겁니다.
prototype을 사용하면 메서드 코드 영역을 공유하므로 메모리 사용은 줄어들겠지만, public method가 되잖아요?
encapsulation의 실현을 위하여 private method를 구현하기 위해서는, 결국 (위의 ditto님이 단점이라고 지적하시기는 했지만)
함수 내에 method 코드를 삽입할 수 밖에 없지 않나요?
그래서, 저는 인스턴스를 많이 만들어야 하는 경우에는 prototype을 사용하고 (네이밍 규칙으로 private vs public을 구분),
그렇지 않은 경우는 함수 내에서 바로 method를 구현합니다.
그런데 함수 내에서 바로 method를 구현할 경우 메모리를 많이 사용할텐데, 메모리가 충분하다고 가정할 경우(즉 자바스크립트 해석
엔진 입장에서만 생각해보면) 퍼포먼스에 어떤 영향을 미칠까요? 자바스크립트의 scope chain 방식을 보면, 단순히 객체가 많다고 느려질
이유는 없어보이는데요...
OOP와 SP(구조적 프로그래밍)은 전혀 다른 개념입니다. 어떤 것을 원
OOP와 SP(구조적 프로그래밍)은 전혀 다른 개념입니다. 어떤 것을 원하는 것인지 질문을 통해서 알기 힘들군요.
- 죠커's blog / HanIRC:#CN
질문이 좀 애매했네요;;
OOP에 대한 언급은 그냥 사족처럼 썼던건데
질문이 좀 애매해졌네요
뭐 그러니까
자바 스크립트로 소스를 보기좋고 깔끔하게
하고 싶은데
팁같은게 있나 질문 드린 것입니다 ^^
//TODO
제가 현재 웹프로그래머이긴 하나 html이나 script 코딩 능력이 너
제가 현재 웹프로그래머이긴 하나 html이나 script 코딩 능력이 너무 부족하여 언제나 주먹구구식 코딩을 하거나 server에서 처리해버리지요.
비록 javascript 고수는 아닙니다만 아래에 제가 사용하는 코드들의 일부를 보여드리겠습니다.
어렵지 않으리라 생각되는데 클래스화, 오버라이딩과 유사한 기존 클래스에 메서드 추가, 사용자 정의 예외클래스등의 예제입니다.
소스를 이해하시면 아이디어를 떠올리는데 도움이 될 것 같습니다.
그리고 미리 밝혀드리지만 거의 대부분 남의 소스를 참고한 것들입니다.
명료한 해답은 아니겠지만,, 솔직히 괜찮은 javascript 소스나 예제는 서로 공유했으면 하는 바램에 이 글을 썼습니다. :)
추가로 저의 자바스크립트관련 북마크Javascript 메뉴얼h
추가로 저의 자바스크립트관련 북마크
Javascript 메뉴얼
http://koxo.com/
CSS 예제들
http://www.w3schools.com/css/css_examples.asp
XMLHttp 관련
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/b24aafc2-bf1b-4702-bf1c-b7ae3597eb0c.asp
http://jibbering.com/2002/4/httprequest.html
http://www-128.ibm.com/developerworks/kr/library/wa-ie2mozgd/
참고하면 좋을만한 예제들.. 그러나 이해하기 어려운 :!:
http://webfx.eae.net
소스를 읽어보았는데요....
아직 실행해 보지는 않았습니다다만....
맨 위에부터 this가 나오는데요
선언하지 않고도 바로 this.~~ 에다가
저장을 할수가 있는건가요?
자바스크립트 문법은 문외인이라;;
//TODO
좋은 코드는 아니지만 여러가지 가능성을 공부해보시라고...[cod
좋은 코드는 아니지만 여러가지 가능성을 공부해보시라고...
function 내에서 바로 메소드를 선언하면 메모리 낭비가 많다고 하더
function 내에서 바로 메소드를 선언하면 메모리 낭비가 많다고 하더군요.
그래서 이렇게 쓰는게 나을 것 같습니다.
저도 javascript를 잘 모르지만 javascript가 원래 ne
저도 javascript를 잘 모르지만 javascript가 원래 netscape에서 나온거다보니 netscape나 mozilla쪽을 보시면 좋은 자료가 많이 있습니다.
http://developer.mozilla.org/en/docs/JavaScript
http://www.mozilla.org/js
http://www.mozilla.org/docs/web-developer/#scripting
특히 firefox 같은 mozilla product들은 웹페이지에서 사용하듯이 어플리케이션 자체의 행동을 많은 부분은 javascript등으로 scripting 하므로 script 개발에 유용한 툴들을 많이 제공하고, 소스를 들여다 보셔도 도움이 될 부분이 많이 있을 겁니다.
프로토타입 기반 언어
프로토타입 기반 언어의 특성을 활용하면 좋은 설계의 코드가 가능합니다.
http://www.crockford.com/javascript/javascript.html
http://en.wikipedia.org/wiki/Prototype-oriented
자바스트립트로 클래스 흉내내기...
prototype을 사용하면 메서드 코드 영역을 공유하므로 메모리 사용은 줄어들겠지만, public method가 되잖아요?
encapsulation의 실현을 위하여 private method를 구현하기 위해서는, 결국 (위의 ditto님이 단점이라고 지적하시기는 했지만)
함수 내에 method 코드를 삽입할 수 밖에 없지 않나요?
실제로 크록포드씨가 YUI에 구현한 방식을 보면 메모리가 낭비되더라도 확실하게 encapsulation을 해주고 있는 듯 합니다.
아래 사이트에서는 여러가지 방식의 코딩 방식을 설명하고 있습니다.
http://www.wait-till-i.com/2007/08/22/again-with-the-module-pattern-reveal-something-to-the-world/
그래서, 저는 인스턴스를 많이 만들어야 하는 경우에는 prototype을 사용하고 (네이밍 규칙으로 private vs public을 구분),
그렇지 않은 경우는 함수 내에서 바로 method를 구현합니다.
그런데 함수 내에서 바로 method를 구현할 경우 메모리를 많이 사용할텐데, 메모리가 충분하다고 가정할 경우(즉 자바스크립트 해석
엔진 입장에서만 생각해보면) 퍼포먼스에 어떤 영향을 미칠까요? 자바스크립트의 scope chain 방식을 보면, 단순히 객체가 많다고 느려질
이유는 없어보이는데요...
http://wiki.kldp.org/wiki.php/superwisdom
http://kangcom.com/sub/view.a
http://kangcom.com/sub/view.asp?topid=1&sku=200809180003
이 책이 도움이 되실것 같습니다.
----
웹페이지 : http://bzpalm.net/
----
웹페이지 : http://bzpalm.net/
제이쿼리 훌륭한
제이쿼리
훌륭한 라이브러리를 쓰는 것도 좋은 방법입니다.
댓글 달기