jQuery

객체지향 자바스크립트 2-1

우혁이 아빠 2009. 12. 14. 01:15
원본 소스  

http://insightbook.springnote.com/pages/1582932

 

2-1 동일한 객체를 가리키는 여러 변수들에 대한

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//obj를 빈 객체로 설정한다.

var obj = new Object();

 

//이제 objRef는 앞의 빈 객체를 가리킨다.

var objRef = obj;

 

//앞에서 생성했던 객체의 프로퍼티를 수정한다.

obj.oneProperty = true;

//(두 변수 모두 동일한 객체를 가리키고 있기 때문이다.)

alert(obj.oneProperty == objRef.oneProperty);

 

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

2-2 스스로를 수정할 있는 객체에 대한

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//아이템 배열을 생성한다.

var items = new Array("one", "two", "three");

 

//아이템 배열에 대한 참조를 하나 생성한다.

var itemsRef = items;

 

//원본 배열에 아이템을 하나 추가한다.

items.push("four");

 

//두 변수가 동일한 배열 객체를 가리키기 때문에

//각 배열의 크기가 같아야 한다.

alert(items.length == itemsRef.length);

 

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

2-3 원래 객체는 그대로 두고 객체의 참조를 변경

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//items가 문자열 배열을 가리키게 한다.

var items = new Array("one", "two", "three");

 

//itemsRef가 items 참조를 가리키게 한다.

var itemsRef = items;

 

//items가 새로운 객체를 가리키게 한다.

items = new Array("new", "array");

 

//items와 itemsRef는 이제 서로 다른 객체를 가리킨다.

//items는 new Array("new", "array")를 가리키고

//itemsRef는 new Array("one", "two", "three")를 가리킨다.

alert(items != itemsRef);

 

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

2-4 내용을 수정할 없는 새로운 객체를 만드는 객체 수정에 대한

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//items이 새로운 문자열 객체를 가리키게 한다.

var item = "test";

 

//itemRef는 이제 동일한 문자열 객체를 가리킨다.

var itemRef = item;

 

//문자열 객체에 새로운 텍스트를 이어붙이다.

//주목:이렇게 하면 원본 객체를 수정하지 않고

//새로운 객체를 만든다.

item += "ing";

 

//완전히 새로운 객체를 생성했기 때문에

//item과 itemRef는 서로 다르다.

alert(item);

alert(itemRef);

alert(item != itemRef);

 

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

2-5 자바스크립트 함수 오버로딩에 관한 가지

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//메시지를 보내는 간단한 함수

function sendMessage (msg, obj) {

//메시지와 객체 모두를 받으면

if (arguments.length == 2)

//객체에 메시지를 보낸다.

obj.alert(msg);

 

//그렇지 않으면 메시지만 받았다고 판단한다.

else

//단순히 기본 에러 메시지를 출력한다.

alert(msg);

}

 

//다음 두 호출 모두 제대로 작동한다.

sendMessage("Hello, World!");

sendMessage("How are you?", window);        

 

//전달인자를 여러 개 받아 배열을 만들어 반환하는 함수

function makeArray () {

//임시 배열

var arr = [];

 

//각 전달인자를 방문한다.

for (var i = 0; i < arguments.length ; i++) {

arr.push(arguments[i]);

}

 

//생성한 배열을 반환한다.

return arr;

}

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

2-6 에러 메시지나 기본 메시지 출력하기

기본

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

function displayError (msg) {

//msg가 정의되었는지 검사한다.

if (typeof msg == 'undefined') {

//msg가 정의되지 않았으면 기본 메시지를 사용한다.

msg = "An error occured.";

}

 

//메시지를 출력한다.

alert(msg);

}

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

응용

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

function displayError () {

var frm = document.form;

var msg = frm.msg.value;

//msg가 정의되었는지 검사한다.

if (msg == '') {

//msg가 정의되지 않았으면 기본 메시지를 사용한다.

msg = "An error occured.";

}

 

//메시지를 출력한다.

alert(msg);

}

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

<form name="form">

<input type="text" name="msg" />

<input type="button" value="test" onclick="displayError()" />

</form>

</BODY>

</HTML>

 

2-7 객체의 타입을 결정하는 typeof 사용한

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//숫자를 담은 변수가 실제로는 문자열인지 검사한다.

if (typeof num == "string") {

//그렇다면 문자열을 파싱해서 숫자를 얻는다.

num = parseInt(num);

}

 

//배열을 담은 변수가 실제로는 문자열인지 검사한다.

if (typeof arr == "string") {

//그렇다면 배열을 만들기 위해 쉼표(,)를 기준으로 문자열을 나눈다.

arr = arr.split(",");

}

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

2-8 객체의 타입을 결정하는 constructor 프로퍼티를 사용하는

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//숫자를 담은 변수가 실제로는 문자열인지 검사한다.

if (num.constructor == "String") {

//그렇다면 문자열을 파싱해서 숫자를 얻는다.

num = parseInt(num);

}

 

//배열을 담은 변수가 실제로는 문자열인지 검사한다.

if (arr.constructor == "String") {

//그렇다면 배열을 만들기 위해 쉼표(,)를 기준으로 문자열을 나눈다.

arr = arr.split(",");

}

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

 

</BODY>

</HTML>

 

변수 타입 검사하지

Variable

typeof Variable

Variable.constructor

{an:"object"}

object

Object

["an", "array"]

object

Array

function(){}

function

Function

"a string"

string

String

55

number

Number

true

boolean

Boolean

new User()

object

User

 

2-9 함수에 전달되는 모든 전달인자를 엄격하게 관리하는 함수

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//변수 타입 목록을 기준으로 전달인자 목록을 엄격히 검사한다.

function strict (types, args) {

//타입의 개수와 전달인자 개수가 일치하는지 확인한다.

if (types.length != args.length) {

//일치하지 않으면 유용한 정보를 담은 예외를 던진다.

throw "Invalid number of arguments. Expected " + types.length +

", received " + args.length + " instead.";

}

 

// 각 전달인자를 방문하면서 타입을 검사한다.

for (var i = 0; i < args.length; i++ ) {

//타입이 일치하지 않으면 유용한 정보를 담은 예외를 던진다.

if (args[i].constructor != types[i]) {

throw "Invalid argument type. Expected " + types[i].name +

", received " + args[i].constructor.name + " instead.";

}

}

}

 

//사용자 목록을 출력하는 간단한 함수

function userList (prefix, num, users) {

//prefix는 문자열, num은 숫자,

//users가 배열임을 명확히 한다.

strict([String, Number, Array], arguments);

 

//'num' 개수만큼 사용자들을 방문한다.

for (var i = 0; i < num; i++ ) {

//각 사용자에 관한 메시지를 출력한다.

alert(prefix + ": " + users[i]);

}

}

</script>

<TITLE> New Document </TITLE>

</HEAD>

 

<BODY>

<input type="button" value="test" onclick="userList('user', 3, ['tazz001','tazz002','tazz003'])"/>

</BODY>

</HTML>

 

2-10 자바스크립트에서 변수 유효범위가 어떻게 작동하는지 보여주는

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<script type="text/javascript">

//전역 변수 foo를 test로 설정

var foo = "test";

 

//if 블록 안

if (true) {

//foo를 'new test'로 설정

//주목: 이곳은 여전히 전역 유효번위 안이다.

var foo = "new test";

}

 

//다음에서 볼 수 있듯이 foo도 역시 'new test'가 되었다.

alert(foo == "new test");

 

//변수 foo를 수정하는 함수를 만든다.

function test () {

var foo = "old test";

}

 

//함수가 호출될 때 'foo'는 함수 유효범위 안에 있다.

test();

 

//여기서 확인할 수 있다. foo의 값은 여전히 'new test'다.

alert(foo == "new test");

</script>

<TITLE> New Document </TITLE>

</HEAD>

<BODY>

 

</BODY>

</HTML>