Prototype.js 의 Object 객체의 메소드
페이지 정보
작성자 MintState 댓글 0건 조회 12,782회 작성일 10-01-19 11:38본문
Prototype.js 의 Object 객체의 메소드
1. Object.extend
A 라는 원본 개체가 가지고 있는 프로퍼티를 B라는 대상 개체에 복사합니다. 반환은 B 를 돌려 줍니다.
예제를 보시면 개에다가 새의 프로퍼티들을 복사 합니다.
개에 나는 기능이 추가되고 원본(dog) 개체가 가지고 있던 프로퍼티인 sound 가 bird 개체의 sound 로 덮어 씌워집니다.
2. Object.inspect
디버그를 할수 있도록 문자열을 리턴합니다. 사실 자바스크립트 코어 메소드인 toString 을 사용할수도 있으나 toString 은 보통 개발자가 보고 싶어하는 유용한 정보를 보여주지 않습니다.
때문에 이 메소드를 사용합니다. 유저가 직접 만든 객체에도 inspect 메소드를 추가한다면 마찬가지로 노출해 줍니다.
순서 대로 결과는
[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 형식으로 리턴합니다.
순서대로 결과는
[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 메소드를 호출 합니다.
결과는 <a href="http://prototypejs.org/api">Prototype API</a> 입니다.
6. clone
빈 개체에 개체의 프로퍼티를 복사합니다.
실제 내부적으론 Object.extend 를 사용합니다.
대상 개체의 프로퍼티를 빈객체에 복사한다 정도입니다.
7. 기타
ps. 출처 : http://run2you.tistory.com/32
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
|
댓글목록
등록된 댓글이 없습니다.