2-21 constructor 프로퍼티를 사용하는 예
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script type="text/javascript">
//간단한 새 User 객체를 정의한다.
function User () {}
//새 User 객체를 만든다.
var me = new User();
//역시나 새 User 객체를 만든다.
//(첫 번째 User 객체의 constructor를 참조한다.)
var you = new me.constructor();
//실제로 constructor가 같음을 알 수 있다.
alert(me.constructor == you.constructor);
</script>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
2-22 prototype 객체를 통해 추가한 메서드를 갖는 객체의 예
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script type="text/javascript">
//새 User 생성자를 만든다.
function User (name, age) {
this.name = name;
this.age = age;
}
//객체 프로토타입에 새 함수를 추가한다.
User.prototype.getName = function () {
return this.name;
}
//프로토타입에 또 다른 함수를 추가한다.
//콘텍스트는 생성될 객체 안에 존재한다.
User.prototype.getAge = function () {
return this.age;
}
//새 User 객체를 만든다.
var user = new User("Bob", 44);
//앞에서 추가한 두 메서드가 적절한 콘텍스트를
//갖고 객체에 들어 있음을 알 수 있다.
alert(user.getName() == "Bob");
alert(user.getAge() == 44);
</script>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
2-23 생성자 함수에서만 사용할 수 있는 private 메서드 예
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script type="text/javascript">
//교실을 표현하는 객체 생성자
function Classroom (students, teacher) {
//수업을 듣는 모든 학생의 정보를 출력하는 private 메서드
function disp () {
alert(this.name.join(", "));
}
//수업 정보를 public 객체 프로퍼티에 저장한다.
this.students = students;
this.teacher = teacher;
//오류를 출력하기 위해 private 메서드를 호출한다.
disp();
}
//새로운 교실 객체를 만든다.
var class = new Classroom(["John", "Bob"], "Mr. Smith");
//disp는 이 객체의 public 프로퍼티가 아니기 때문에 실패한다.
class.disp();
</script>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
2-24 privileged 메서드를 사용하는 예
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script type="text/javascript">
//새로운 User 객체 생성자를 만든다.
function User (name, age) {
//사용자가 태어난 날을 계산한다.
var year = (new Date()).getFullYear() - age;
//year 변수에 접근할 수 있으면서도 여전히 외부에서
//사용할 수 있는 privileged 메서드를 만든다.
this.getYearBorn = function () {
return year;
};
}
//User 객체의 새 인스턴스를 만든다.
var user = new User("Bob", 44);
//반환된 날짜가 올바른지 확인한다.
alert((new Date()).getFullYear()-44);
alert(user.getYearBorn() == 1962);
//객체의 private 프로퍼티인 year에는 접근할 수 없다.
alert(user.year == null);
</script>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
2-25 새 객체 인스턴스가 만들어질 때 동적으로 생성되는 메서드 예
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script type="text/javascript">
//프로퍼티들을 나타내는 객체를 받는 새로운 User 객체를 만든다.
function User (properties) {
//객체 프로퍼트를 하나씩 방문하면서
//유효범위를 설정한다(앞에서 논의했듯이).
for ( var i in properties ) { (function () {
//이 프로퍼티를 위한 새 get 메서드를 만든다.
this[ "get" + i ] = function () {
return properties[i];
};
//이 프로퍼티를 위한 새 set 메서드를 만든다.
this[ "set" + i ] = function (val) {
properties[i] = val;
};
})(); }
}
//새로운 User 객체를 하나 생성하고
//초깃값으로 사용될 프로퍼티들을 나타내는 객체를 전달한다.
var user = new User ({
name: "Bob",
age: 44
});
//properties 객체 안에서 name 프로퍼티는 private이기 때문에
//외부에서 볼 때는 존재하지 않는다.
alert(user.name == null);
//그렇지만 동적으로 만들어지는 메서드인
//getname() 메서드에는 접근할 수 있다.
alert(user.getname() == "Bob");
//새로 만들어진 함수로
//age의 값을 설정하거나 가저올 수 있다.
user.setage(22);
alert(user.getage() == 22);
</script>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
2-26 static 메서드의 간단한 예
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<script type="text/javascript">
//User 객체에 붙어 있는 static 메서드
User.cloneUser = function (user) {
//새로운 사용자를 만들어 돌려준다.
return new User(
//전달받은 User 객체의 복사본
user.getName(),
user.getAge()
);
};
</script>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
'javascript > proJavaScript' 카테고리의 다른 글
객체지향 자바스크립트 2-2 (0) | 2009.12.14 |
---|