본문 바로가기
javascript

Object.extend 상속.

by 새로운 도전을 위한 한걸음 2015. 5. 10.
extend() 메소드는 두번째 인자로 지정한 오브젝트의 모든 것을 첫 번째 인자의 오브젝트에 복사한다.
첫번째와 두번째 오브젝트에 같은 이름의 프로퍼티가 있다면 오버라이드가 된다.

prototype.js 에 구현된 Object.extend() 의 소스를 살펴보면 아래와 같다.
Object.extend = function(destination, source) {
  for (var property in source)
    destination[property] = source[property];
  return destination;
};

for (var property in source)
    destination[property] = source[property];
for(in) 루프를 source 오브젝트의 프로퍼티 수만큼 반복한다. 루프가 반복될 때마다 property 변수에 source 오브젝트의
프로퍼티 이름이 순차적으로 설정되며, source 오브젝트의 프로퍼티 값을 destination[property] 으로 복사하게 된다.
프로퍼티를 복사한다는 것은 곧 프로퍼티가 가지고 있는 모든 걸 복사한다는 의미이다.

Object.extend() 메소드는 여러 오브젝트에서 상속받을 수 있으며, 상속을 받았던 오브젝트로 다시 상속을 해줄 수 있다.

실제 사용 예]
//객체를 생성하여 확장하기
var person = {name: 'utsman'};
var detail = {address: 'seoul'};

Object.extend(person, detail);

alert('name=' + person.name);   // result====>> name=utsman
alert('address=' + person.address); // result====>>address=seoul

//내장 객체 확장하기
Object.extend(
    String.prototype, {
          escapeQuot: function () {
                return this.gsub('"', '"').gsub("'", ''');
          }
    }
);

var str = '그가 말했다 "누구냐? 넌"';
alert(str.escapeQuot());   // result====>> 그가 말했다 "누구냐? 넌"