2012-02-09 4 views
2

I 리터럴 다음 개체가 : 만들기 새로운 객체

var a = {a:1,b:2} 

이 지금은 같은 개체의 다른 인스턴스를하고자합니다. 내가 생성자를 사용하고 있다면,이 '새로운'연산자를 사용하여이 작업을 수행 할 수 있습니다, 예 :

b = new a(); 

어떻게 객체 리터럴을 사용하여 개체의 새 인스턴스를 만드는 방법?/:

+0

참조 Object.create의 MDN 심을 얻을 수 Object.create

var b = Object.create(a); console.log(b.a); //1 console.log(b.b); //2 

DEMO

으로 그리고 물론 것 /stackoverflow.com/questions/728360/copying-an-object-in-javascript –

답변

3

가장 간단한 방법은 이전 버전의 브라우저를 지원해야하는 경우, 당신은 HTTP here

+0

이 방법을 사용하면주의하지 않으면 메모리 누수가 발생할 위험이 있습니까? 객체가 이와 같이 반복적으로 "복제"된 경우 프로토 타입 체인이 커지고 프로토 타입 체인의 모든 객체는 활성 참조가 남아 있기 때문에 가비지 수집되지 않습니다. 대부분의 JavaScript 스크립트는 수명이 짧기 때문에 큰 문제는 아니지만이 가능성을 인식하는 것이 현명한 방법이라고 생각합니다. –

+0

@CDSanchez - 예 - 새로운 객체가 이전의 프로토 타입을 공유하는 것처럼 보입니다. - [demo] (http://jsfiddle.net/eXgx3/1/) - 프로토 타입이 성장할 것이라고 생각하지 않습니다. 'a '를 100 번 복제했다면,'a '라는 참조를 가진 100 개의 객체를 가질 수 있습니다. 그래서 예,'a'는 쓰레기 수거를 할 수 없었 습니다만, 큰 문제로 보지 않습니다. –

+0

복제본을 어떻게 든 복제 된 상태로 유지한다면 제가 언급 한 것이 었습니다. 예를 들어,'a = {}; loop 99 times {a = Object.create (a)}'이 경우 프로토 타입 체인의 끝에 원본과 99 개의 개체가있는 100 개의 개체가 있습니다. 누군가 실제적으로 이와 같은 것을 할 수 있다는 것은 완전히 상상할 수 없습니다. 어쨌든, 이것이 OP에 영향을 미치지 않을 것이기 때문에 그 점을 떠날 것입니다 - 저는 이것을 지적하고 싶었습니다. –