Page 1 of 1

자바스크립트.

Posted: 2005 01 31 10:03 35
by Thom
제가 잘 가는 학과 커뮤니티 사이트가 있는데요.
그곳 게시판에 글을 쓸때 게시판은 폼의 값을 체크합니다. 잘못된 값이 없나.. 값을 입력하진 않았나...

<form name='write'...
...
</form>

이렇게 생긴 폼이죠.

스크립트에서는 이런식으로 값을 체크합니다.

if( document.write.ddd.value == '' ) then...

여기서 문제가 있더군요. IE 에서는 잘 동작하는데, 불여우는 document.write (write라고 이름지어진 폼) 과 document.write() (자바스크립트 함수) 를 헷갈려하는 것 같습니다. ㅎㅎ 결국 폼의 이름을 고쳐야할것 같다고 말해줬죠.


뭐.. 그냥 이런 경우가 있다고 글한번 적어봤습니다. ^^


그런데 궁금한게 있는데.. 자바스크립트에서 함수를 함수의 전달인자로 사용할수 있나요? 예를 들어.. C++ 의 함수 포인터처럼요... -_-a

눼~~~~~~~~

Posted: 2005 01 31 10:58 13
by 박민권
이런 방법이 있습니다.

Code: Select all

function abc(){
 this.n = 10; //멤버변수라 할 수 있습니다.
 this.alert = abc_alert; //메소드라 할 수 있습니다.
}

function abc_alert(n){
  alert(n);
}

var a = new abc();
alert(a.n); //경고창 10
a.alert(20); //경고창 20
이런식으로 abc의 객체를 생성해서(C++은 인스턴스인데 같은건지 개념이 잘 ㅡㅡ;)
저 abc를 인수로 넘겨줄 수 있습니다. class와는 좀 다릅니다. 어설픈 객체지향.
각종 document.frm.txt 이런것도 객체로써 인수로 넘겨줄 수 있는것과 마찬가집니다.[/code]

이런 방법도..

Posted: 2005 01 31 14:10 23
by tenshi
javascript 1.x에서는 class 구현에 prototype 사용이 권고되고 있습니다.

Code: Select all

function a()
{
    this.testVal = '';

    this.testFunc = function () {
        alert('this is a.testFunc()');
    }
}
이런식의 사용은 인스턴스 생성시마다 해당 인스턴스의 모든 내용을 메모리에 담아둔다고 하더군요.
그 단점을 보완한 녀석이 prototype입니다.

Code: Select all

function a()
{
    this.testVal = '';
}

a.prototype.testFunc = function () {
    alert('this is a.testfunc()');
}
또 기존 자료형에 대한 응용도 가능합니다.

Code: Select all

String.prototype.trim = function() {
    return this.replace(/(^\s+|\s+$)/, "");
}
var testStr = ' test tt ';
alert(testStr.trim()); // return 'test tt'
위와 같은 식으로.. :)

document.write.ddd.value 같은 경우..
write의 중복을 피하시려면
document.forms["write"].elements["ddd"].value 와 같은 방법으로
해당 값의 형태를 명시해주시면 되겠습니다.
개인적으로는 어떤 구문이건 일일히 형태를 명시해주는 편이 좋지 않나 싶습니다. :)

좋군요.

Posted: 2005 01 31 22:14 34
by 박민권
제가 너무 옛날 책을 보고 하다보니 prototype이라는게 있는지도
몰랐습니다. 덕분에 좋은거 배웠습니다. ^^
그나저나... 지금까지 만든 js 또 죄다 고치려니 앞이 캄캄하군요. OTL