YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > Ajax & Issue
검색
멤버이름    오토
비밀번호 
 

Prototype.js 의 Object 객체의 메소드

페이지 정보

작성자 MintState 댓글 0건 조회 12,783회 작성일 10-01-19 11:38

본문

Prototype.js 의 Object 객체의 메소드

1. Object.extend
A 라는 원본 개체가 가지고 있는 프로퍼티를 B라는 대상 개체에 복사합니다. 반환은 B 를 돌려 줍니다.

var dog = {
	sound : function(){
		return 'bark bark';
	}
}
var bird = {
	sound : function (){
		return 'jack jack';
	},
	fly   : function(){
		return 'fly fly';
	}
}
Object.extend(dog, bird);
alert(dog.sound());
alert(dog.fly());

예제를 보시면 개에다가 새의 프로퍼티들을 복사 합니다.
개에 나는 기능이 추가되고 원본(dog) 개체가 가지고 있던 프로퍼티인 sound 가 bird 개체의 sound 로 덮어 씌워집니다.


2. Object.inspect
디버그를 할수 있도록 문자열을 리턴합니다. 사실 자바스크립트 코어 메소드인 toString 을 사용할수도 있으나 toString 은 보통 개발자가 보고 싶어하는 유용한 정보를 보여주지 않습니다.
때문에 이 메소드를 사용합니다. 유저가 직접 만든 객체에도 inspect 메소드를 추가한다면 마찬가지로 노출해 줍니다.

var arr = [1,2];
var str = 'hello javascript';
var hash = $H({
	a1 : '3',
	a2 : function(){
		return '4'
	},
	a3 : {
		b1 : '1'
	}
});
var userMake = {
	name : 'nice guy',
	inspect : function(){
		return 'i am '+ this.name;
	}
};
alert(Object.inspect(arr));
alert(Object.inspect(str));
alert(Object.inspect(hash));
alert(Object.inspect(userMake));


순서 대로 결과는
[1, 2]

'hello javascript'

#<Hash:{'a1': '3', 'a2': function () {
return "4";
}, 'a3': [object Object]}>

i am nice guy

를 리턴합니다. prototype.js 가 가지고 있는 개체인 Hash, Enumerable 의 내용을 확인 할수도 있습니다.


3. Object.toJSON
json 형식으로 리턴합니다.

var arr = [1,2];
var str = 'hello javascript';
var hash = $H({
	a1 : '3',
	a2 : function(){
		return '4'
	},
	a3 : {
		b1 : '1'
	},
	a4 : [1, 2]
});
var userMake = {
	name : 'nice guy',
	inspect : function(){
		return 'i am '+ this.name;
	}
}
alert(Object.toJSON(arr));
alert(Object.toJSON(str));
alert(Object.toJSON(hash));
alert(Object.toJSON(userMake));


순서대로 결과는
[1, 2]

"hello javascript"

{"a1": "3", "a3": {"b1": "1"}, "a4": [1, 2]}

{"name": "nice guy"}

입니다.
Array , String , Number 형 등은 그냥  바로 리턴 해 버리고 객체 안에서의 Array, String, Number 형은 Json 의 키와 값으로 설정 됩니다.
undefined, function , unknown 등은 패스 해버립니다. (userMake 개체의 inspect 메소드를 패스해버린걸 봐도 알수 있습니다)


4. Object.toQueryString
queryString 형식의 값으로 반환 합니다.
e.x) name=niceguy&height=200&weight=80

5. toHTML
해당 객체의 toHTML 을 호출 합니다.  toHTML 메소드가 존재 하지 않으면 Sting 의 interpret 메소드를 호출 합니다.

var Bookmark = Class.create({
	initialize: function(name, url) {
		this.name = name;
		this.url = url;
	},
	toHTML: function() {
		return '<a href="#{url}">#{name}</a>'.interpolate(this);
	}
});
var api = new Bookmark('Prototype API', 'http://prototypejs.org/api');
alert(Object.toHTML(api));


결과는  <a href="http://prototypejs.org/api">Prototype API</a> 입니다.


6. clone
빈 개체에 개체의 프로퍼티를 복사합니다.
실제 내부적으론 Object.extend 를 사용합니다.
대상 개체의 프로퍼티를 빈객체에 복사한다 정도입니다.


7. 기타
Object.extend = function(destination, source) {
	/*
	source 객체의 프로퍼티를 destination 개체의 프로퍼티로 복사 합니다. 
	리턴은 destination 을 돌려줍니다.
	prototype.js 소스를 보시면 Array.prototype 처럼 prototype 을 복사 하기도 합니다.
	*/
	for (var property in source)
		destination[property] = source[property];
	return destination;
};

Object.extend(Object, {
	inspect: function(object) {
		try {
			if (Object.isUndefined(object)) return 'undefined';
			if (object === null) return 'null';
			return object.inspect ? object.inspect() : String(object);
			/*
			해당 개체의 inspect 메소드가 존재하면 inspect 메소드를 뿌려주며 존재 하지 않을시 String 형으로 반환 합니다.
			개발자가 생성한 객체의 경우 inspect 메소드를 지정함으로써 디버깅시 용이하게 만들수 있습니다.
			*/
		} catch (e) {
			if (e instanceof RangeError) return '...';
			throw e;
		}
	},

	toJSON: function(object) {
		var type = typeof object;
		switch (type) {
			case 'undefined':
			case 'function':
			case 'unknown': return;
			case 'boolean': return object.toString();
		}
		/*
		(undefined , function, unkown) type 일시 json 형으로 만들지 않고 넘어가며 boolean 형일경우 'true', 'false' 형의 문자로 return 해줍니다.
		*/
		if (object === null) return 'null';
		// null 은 'null' 문자로 리턴해줍니다.
		if (object.toJSON) return object.toJSON();
		// 해당 객체가 toJSON 메소드가 지정되었을시 메소드를 실행한 값을 리턴해 줍니다.
		if (Object.isElement(object)) return;
		// nodeType 이 1 즉 속성일시 그냥 넘어갑니다.
		var results = [];
		for (var property in object) {
			var value = Object.toJSON(object[property]);
			if (!Object.isUndefined(value))
				results.push(property.toJSON() + ': ' + value);
		}
		/*
		객체가 넘어 왔을시 해당 객체를 돌면서 해당객체의 프로퍼티중 JSON 으로 쓸만한 녀석들만 배열에 넣은뒤 아래에서 JSON 타입으로 반환해 줍니다.
		*/
		return '{' + results.join(', ') + '}';
	},
});



ps. 출처 : http://run2you.tistory.com/32

댓글목록

등록된 댓글이 없습니다.

Total 32건 1 페이지
Ajax & Issue 목록
번호 제목 글쓴이 조회 날짜
32 MintState 9036 02-02
31 MintState 9546 05-30
30 MintState 11220 03-04
29 MintState 12426 03-21
28 MintState 12239 11-25
27 MintState 16994 09-19
26 MintState 13588 06-23
25 MintState 10976 06-01
24 MintState 15712 06-01
23 MintState 11720 06-01
22 MintState 13392 04-18
21 MintState 11944 02-21
20 MintState 16196 07-13
19 MintState 15927 07-02
열람중 MintState 12784 01-19
17 MintState 17559 01-19
16 MintState 16003 08-27
15 MintState 15456 08-27
14 MintState 15890 07-07
13
Google Maps API 댓글+ 1
MintState 21610 03-18
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™