복사

2013-07-26 1 views
0

나는 등 복사

var customObject = function() { 
    this.property = "value"; 
}; 

customObject.prototype = new otherObject(); 

customObject.prototype.property2 = function() {}; 

처럼 보이는 물체가 자바 스크립트 인스턴스 비슷한 개체를 수정 - 그것은 이것보다 훨씬 더 큰합니다.

new customObject()을 작성하여 개체를 성공적으로 인스턴스화 할 수 있습니다.

이제 조금 다른 개념이지만 다소 비슷한 개체를 만들고 싶습니다. 여기에는 특정 속성을 수정하고 일부 속성을 추가하거나 제거하는 것이 포함됩니다. 위의 예제에서와 같이, 나는 new customObject2()을 작성하여 호출 할 수 있기를 바랍니다.

나는 생각 나는 간단하게 할 수있는 :

var customObject2 = new customObject(); 
customObject2.prototype = customObject.prototype; 
customObject2.property = "modified value"; 

그러나, 나는 내가 customObject2 함수 아님을 알리는 오류 메시지가 new customObject2()을 수행하여 인스턴스화하려고 할 때.

내가 원하는 패턴을 충분히 설명 할 수 있기를 바랍니다. 그런 패턴을 만들기 위해 어떤 접근 방식을 취해야합니까?

+0

글쎄, 당신이하고있는 코드를보고'customObject2 = 새로운 customObject()'. 그게 기능이 아닌 이유를 설명해야합니다. –

+0

내가 필요한 것을 얻을 수있는 빠른 방법이 있습니까? 아니면 수동으로'var customObject2 = function() {};'을 만들고 원래의'customObject'의 모든 직접 속성을 루프하여'customObject2'의'this'에 할당할까요? – user2180613

답변

1

다른 this객체에 생성자를 적용 할 수 있습니다 (이 예상에 다르게 호출하려고하면 즉 당신에게 불법 호출 오류를 제공하지 않습니다)

var customObject2 = function() { 
    customObject.call(this); // construct as if `customObject` 
    // now do more stuff 
    this.anotherProperty = 'foo'; 
}; 
customObject2.prototype = Object.create(customObject.prototype); 
    // inherit prototype but keep original safe 

new customObject2(); 

역 호환이 Object.create

function objectWithProto(proto) { 
    var f; 
    if (Object.create) return Object.create(proto); 
    f = function() {}; 
    f.prototype = proto; 
    return new f(); 
} 
+0

이전 브라우저와 호환되는 Object.create에 대한 대안이 있습니까? 아, 잠시만 기다려주세요. http://stackoverflow.com/questions/5199126/javascript-object-create-not-working-in-firefox – user2180613

+0

@ user2180613 편집보기 –

+0

고마워요, 제가 찾던 바로 그 해결책입니다. 간단히'customObject'를 확장합니다. – user2180613

0

생각해 보면 this should answer your question입니다. 기본적으로 new 키워드는 함수가 아닌 객체를 반환합니다.

+0

아니요. 키워드가하는 일을 잘 알고 있지만 개체를 ​​복사하고 인스턴스화 할 수있는 빠른 방법이 있는지 궁금합니다. – user2180613

0

왜 처음으로 사용한 공식을 사용하지 않으셨습니까? 예를 들어 : customObject

var customObject2 = function(){}; 
customObject2.prototype = new customObject(); 
customObject2.property = "modified value"; 
new customObject2(); // works! 

모든 속성은 프로토 타입 체인을 통해 customObject2의 인스턴스에 의해 상속됩니다. customObject 호스트 객체가 아닌 경우

+0

나는 상속을 찾고 있지 않다. – user2180613