2012-01-11 8 views
2

자바 스크립트 객체를 복제하는 방법이 있습니까? DOM 요소가 아니라 특정 생성자가있는 객체입니다. 예를 들어 전화 번호 개체가 있다고 가정 해 보겠습니다.복제/복제 자바 객체

function PhoneNumber(number, type) { 
    this.number = number; 
    this.type = type; 
} 

var phoneObj1 = new PhoneNumber('1111111111', 'Home'); 
var phoneObj2 = //Copy of phoneObj1, but unique so I can set other parameters if necessary. 

jQuery는이 문제를 연장하여 해결합니다. 대신 전화 번호 생성자 이름의

Object{number:'1111111111' type:'Home'} 

:

var phoneObj2 = $.extend({}, phoneObj1); 

는하지만 일반 객체를 반환합니다. 확장자에 실제로 새로운 PhoneNumber()를 작성하지 않고 원래 phoneObj1의 생성자를 전달하는 방법이 필요합니다. 왜냐하면이 코드가 사용되는 코드가 많은 다른 유형의 객체에서 사용되므로 정확한 시간을 알지 못하기 때문입니다. 내가 참조 할 객체가 있다는 사실을 제외하고는 사용해야하는 생성자.

var phoneObj2 = $.extend(new PhoneNumber(), phoneObj1); //I CANNOT do this! 

//Maybe something like this? 
var phoneObj2 = $.extend(new phoneObj1.constructor.name, phoneObj1); //This throws an error. 
+2

가능한 중복 (HTTP : // 유래.com/questions/122102/what-is-the-the-most-efficient-way-to-clone-a-javascript-object) – fyr

+0

몇 가지 좋은 해답은 http://stackoverflow.com/questions/332422/how-do-i -get-the-object-type-in-javascript – georg

+0

은 'fyr'과 동의했습니다. 나는이 방법을 가장 직선적 인 방법으로 사용한다. Object.create (obj); – dbrin

답변

1

당신은 어느 단지 객체의 유형에 대한 생성자를 반환 또는 객체의 당신의 다른 유형의 각 방법 (아마도 copy()이라고합니다)을 가질 수는 이후 자신의 복사본 (오른쪽 생성자를 호출을한다 그것이 어떤 종류의 물건인지를 안다.) 따라서 모든 객체에 대해 동일한 메소드를 호출하면 작업이 수행됩니다.

이 기능을 기본 클래스에 넣을 수 있으며 모든 파생 클래스는 생성자 함수를 설정해야하며 나머지 코드는 모두 공통적으로 사용됩니다.

0

var phoneObj2 = $.extend(new phoneObj1.constructor, phoneObj1); 

일을 않습니다 밝혀졌습니다. 관련없는 메모에서 phoneObj1의 생성자를 취소하는 중입니다. 따라서 이것은 실제 생성자를 특별히 작성하지 않고 객체를 복제하는 추상적 인 방법으로 사용될 수 있습니다. 나는 복제하고있는 객체로부터 생성자를 단순히 상속받을 수 있습니다.

0

당신은 당신이 새로운 Object.assign() 방법을 사용할 수 있습니다 (45) 또는 (34)의 현대 버전을 지원해야합니다.

Object.assign() 방법은 대상 객체 하나 이상의 소스 개체로부터 모든 열거 고유 속성 값을 복사하는 데 사용된다. 대상 객체를 반환합니다.

var phoneObj2 = Object.assign({}, phoneObj1); 
console.log(phoneObj2); 

이, phoneObj1의 모든 속성을 그들은 빈 객체 {}에 복사하고 phoneObj2으로 결합 된 객체를 반환합니다. 빈 {} 개체와 phoneObj2 변수는 assign 메서드를 사용한 후 메모리의 동일한 개체를 가리 킵니다. 자세한 내용은

는 MDN에 대한 정보를 체크 아웃 : [? 자바 스크립트 객체를 복제하는 가장 효율적인 방법은 무엇]의 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

+0

@ryandlf, 내 답변이 도움이된다면 [투표] (https://stackoverflow.com/help/privileges/vote-up) 또는 [수락] (https://meta.stackexchange.com/questions/) 할 수 있습니다. 5234/답장 해 - 답변 해)? – Eric