객체
- 속성(property)과 메서드(method) 의 집합
- for in 반복문 사용
- '.' 또는 '[]' 연산자로 객체 속성에 접근
- 객체가 변수에 할당될 때 그 변수는 포인터이다.
- 자바스크립트에서는 함수도 객체로 취급
객체의 생성
var dog1= {
name: "백구",
weight: 40,
breed: "똥개",
loves: ["걷기","공 물어오기"],
bark: function() {if(dog1.weght > 30)
alert("멍멍 멍멍!");
else alert("깽깽 깽깽!");
}
};
예제1
object1.html
for(var key in dog1){
document.write(key+":"+dog1[key]+"
");
}
document.write("
");
dog1.weght = 25;
dog1["breed"] = "진돗개";
dog1.loves[1] = "도둑 잡기";
dog1.age = 5;
dog1.bark();
for(var key in dog1){
document.write(key + ":" + dog1[key] + "
");
}
document.write("
");
dog1.loves.push("뼈다귀 씹기"); // loves 배열에 내용 추가
delete dog1.age; // age 항목 삭제
for(var key in dog1){
document.write(key + ":" + dog1[key] + "
");
}
예제2
object2.html
<<script>// zz
var student = {이름: "거시기",국어 : 92,수학 : 98,영어 : 96,과학 : 98}; var output=""; output += "이름 : " + student.이름 + "\n"; output += "국어 : " + student.국어 + "\n"; output += "수학 : " + student.수학 + "\n"; output += "영어 : " + student.영어 + "\n"; output += "과학 : " + student.과학 + "\n"; output += "총점 : " + student.국어 + student.수학 + student.영어 + student.과학) + "\n"; alert(output);
// ]]></script>
객체 관련 키워드 "with"
<<-script>//
with(student) { output += "이름 : " + 이름 + "\n"; output += "국어 : " + 국어 + "\n"; output += "수학 : " + 수학 + "\n"; output += "영어 : " + 영어 + "\n"; output += "과학 : " + 과학 + "\n"; output += "총점 : " + (국어 + 수학 + 영어 + 과학) + "\n"; } alert(output); // with 사용 시, 앞에 계속 붙어 다니던 student. 객체명이 생략된다. (중괄호 안에서만) // ex) student.국어 --> 국어
</script>
객체 관련 키워드 "in" // key 가 객체 안에 있으면 true 반환, 없으면 false 반환
<<script>// <![CDATA[
var student = {이름: "거시기",국어: 92,수학: 98,영어: 96,과학: 98}; var output = ""; output += "'이름' in student : " + ('이름' in student) + "\n"; output += "'성별' in student : " + ('성별' in student); // '성별' 이 student 라는 객체 안에 없으면 true 반환, 없으면 false 반환 alert(output);
// ]]></script>
생성자 만들기 - this
--------------------------------
// dog1
name: 백구
weight: 35
breed: 진돗개
bark: function() {
if(dog1.weight > 30)
alert("멍멍 멍멍!");
else alert("깽깽 깽깽!");}
---------------------------------
---------------------------------
// dog2
name: 쿠키
weight: 20
breed: 말라뮤트
bark: function() {
if(dog1.weight > 30)
alert("멍멍 멍멍!");
else alert("깽깽 깽깽!");}
---------------------------------
---------------------------------
// dog3
name: 말리
weight: 50
breed: 사모예드
bark: function() {
if(dog3.weight > 30)
alert("멍멍 멍멍!");
else alert("깽깽 깽깽!");}
---------------------------------
// dog1,dog2,dog3 을 생성자 this로 한번에 묶을 수 있다. (아래 참조)
---------------------------------
//Dog (name,weight,breed)
this.name = name;
this.weight = name;
this.breed = breed;
bark: function() {
if(this.weight > 30)
alert("멍멍 멍멍!");
else alert("깽깽 깽깽!");}
---------------------------------
생성자 만들기 - constuctor1
<script>
function Dog(name,weght,breed) {
this.name = name;
this.weight = weight;
this.breed = breed;
this.bark = function() {
if(this.weight > 30)
alert(this.name + "가 멍멍 짖습니다.");
else alert(this.name + "가 깽깽 거립니다.");
};
}
var dog1 = new Dog("백구",35,"진돗개"); dog1.bark();
var dog2 = new Dog("쿠키",20,"말라뮤트"); dog2.bark();
var dog3 = new Dog("말리",50,"사모예드"); dog3.bark();
</script>
생성자 만들기 - constuctor2
문제 - 생성자 Stu를 이용해 아래의 자료를 입력받아 총점과 평균을 구하여 출력 결과와 같이 출력하는 자바스크립트를 작성하시오.
[+]입력자료
- stu1 = {이름 : 김태희,국어 : 87,수학 : 98,영어 : 88,과학 : 95}
- stu2 = {이름 : 이보영,국어 : 92,수학 : 98,영어 : 96,과학 : 98}
- stu3 = {이름 : 이종석,국어 : 98,수학 : 96,영어 : 96,과학 : 92}
- stu4 = {이름 : 송중기,국어 : 97,수학 : 98,영어 : 98,과학 : 98}
[+]출력결과
자바스크립트 알림 | X |
이름 총점 평균
김태희 368 92
이보영 384 96
이종석 382 95.5
송중기 391 97.75
| 확인 |
Ans)
<script>
function stu(name,kor,math,eng,sci){
this.name = name;
this.kor = kor;
this.math = math;
this.eng = eng;
this.sci = sci;
this.tot = function() {
return this.kor + this.math + this.eng + this.sci;};
this.ave = function() {
return this.tot()/4; };
this.output = function() {
return this.name + " " + this.tot() + " " + this.ave() + "\n";};
}
var out = "이름 총점 평균\n";
var stu1 = new stu("김태희",87,98,88,95);
var stu2 = new stu("이보영",92,98,96,98);
var stu3 = new stu("이종석",98,96,96,92);
var stu4 = new stu("송중기",97,98,98,98);
out += stu1.output();
out += stu2.output();
out += stu3.output();
out += stu4.output();
alert(out);
</script>
constructor_array constuctor 예제를 배열을 사용하여 작성.
<script>
//stu 객체 생성
var stu = [];
stu.push(new stu("김태희",87,98,88,95));
stu.push(new stu("이보영",92,98,96,98));
stu.push(new stu("이종석",98,96,96,92));
stu.push(new stu("송중기",97,98,98,98));
var out = "이름 총점 평균\n";
for(var i in stu){
out += stu[i].output();
}
alert(out);
</script>
프로토타입
- 객체를 생성하면 함수가 중복되어 메모리 낭비
- 내부에는 속성만, method는 prototype에 넣기
- 모든 자바스크립트 합수는 prototype 객체를 가진다.
------------ 설명 ------------
------------stu1-------------
이름: 김태희
국어: 87
수학: 98
영어: 88
과학: 95
getSum()
getAve()
output()
-------------------------------
// 프로토 타입으로 분리 후
-----------stu1------------------
이름: 김태희
국어: 87
수학: 98
영어: 88
과학: 95
-------------------------------
-----------stu.prototype------------
getSum()
getAve()
output()
---------------------------------
만약 객체가 여러개라면, 저 똑같은 내용의 함수들(getSum(), getAve(), output())은
각 객체마다 있어야 하므로 메모리와 소스 크기등을 많이 잡아 먹는다.
하지만 그 공통된 함수들을 prototype으로 묶음으로서 메모리 효율과 소스코드의 크기를 줄일 수 있다.
예제. prototype
<script>
function stu(이름, 국어, 수학, 영어, 과학) {
this.이름 = 이름;
this.국어 = 국어;
this.수학 = 수학;
this.영어 = 영어;
this.과학 = 과학;
}
stu.prototype.getSum = function() {
return this.국어 + this.수학 + this.영어 + this.과학;
};
stu.prototype.getAve = function() {
return this.getSum() / 4;
};
stu.prototype.output = function() {
return this.이름 + " " + this.getSum() + " " + this.getAve();
};
var out = "이름 총점 평균\n";
var stu1 = new stu("김태희",87,98,88,95);
var stu2 = new stu("이보영",92,98,96,98);
var stu3 = new stu("이종석",98,96,96,92);
var stu4 = new stu("송중기",97,98,98,98);
out += stu1.output();
out += stu2.output();
out += stu3.output();
out += stu4.output();
alert(out);
</script>
접근 제어자
예제 - access1.html
<script>
var student + function(id,name){
var id = id; //지역변수 --> 해당 객체의 내부에서만 접근 가능
this.name = name; //전역변수 --> 객체의 외부에서도 접근 가능.
}
var my = new student("130101","Nuguge");부
alert(my.id + "," + my.name);
</script>
----결과----
자바스크립트 알림 | X |
undefinded,Nuguge
| 확인 |
------------
캡슐화
- 클래스 내부의 연산과정을 숨겨 보다 독립적인 코드 구성
- 예기치 못한 접근을 차단하여 무분별한 사용 방지
예제 - access2.html
<script>
var People = function(na,ag) {
var name = na;
var age = ag;
// 아래의 과정을 숨김 (var로 선언) --> 연산과정을 숨긴다.
var isAdult = function() {
if(age>19) return true;
else return false;
}
this.viewMyInfo = function() {
if(isAdult()) {
return name + "님은 성인입니다.";
}
else {
return name + "님은 미성년 입니다.";
}
}
}
var people = new People("Nuguge",26);
alert(people.isAdult());
// isAdult() 함수는 var(지역) 으로 선언 했기 때문에, 외부에서 사용할 수 없다. --> 안뜬다.
alert(people.viewMyInfo());
</script>
예제 - access3.html
<script>
function Person(firstName, lastName) {
this.constuctor.population ++;
var alive = true;
function getFullName() {
return lastName + "," + fistName;
};
this.toString = function() {
return getFullName();
};
this.isAlive = function() {
return alive;
};
this.age = 1;
};
Person.prototype.addAge = function() {this.age++;};
Person.population = 0;
Person.showTotalPopulation = function(msg) {
alert(msg + ":" + Person.population);
};
var PersonList = [new Person("jae-Seok","Hong"), new Person("Ji-Sung","Park)];
alert(personList[0] + "과 " + personList[1] + "이 태어났습니다.");
alert("현재 인구는" + Person.population + "명 입니다.");
for(var i=0;i<25;i++){
personList[0].addAge();
personList[1].addAge();
}
alert(personList[0] + "은 " + personList[0].age + "살 입니다.");
Person.showTotalPopulation("총 인구");
</script>
'전공 과목 시험정리 > 웹프로그래밍' 카테고리의 다른 글
기본 내장 객체 ( C의 라이브러리 함수와 비슷) (0) | 2015.01.11 |
---|