2014-07-22 5 views
0

동료의 논리를 접했고 변경 사항을 제출하기 전에 결과에 대해 명확하게 알고 싶습니다. 기본적으로,이 클래스가 있습니다개체를 인스턴스화하고 변수에 저장하지 않음

return { 
    propA: new MyClass().propA, 
    propB: new MyClass().propB 
}; 

대안 방법은 새를 선언 할 것 : 다른 파일에서

var MyClass = function(){}; 
MyClass.prototype = {...} 

를,이 같은 작은 선물을 그 클래스를 필요로하고가는 모듈을 정의하고 MyClass 객체를 다음과 같이 사용하십시오.

var myObject = new MyClass();

return { 
    propA: myObject.propA, 
    propB: myObject.propB 
}; 

각각의 장점과 단점은 무엇입니까?

+0

두 가지가 있습니다. * 같은 * 객체의 propA와 propB 속성을 원하거나 다른가? – dfsq

+0

두 프로토 타입 속성이므로 객체간에 공유됩니다. –

+1

Andre : 프로토 타입에 선언 된 멤버/속성이 모든 인스턴스에 대해 동일 할 필요는 없습니다. 특정 인스턴스에 대해 해당 멤버를 숨길 수 있으며 해당 인스턴스에 대해서는 다를 수 있습니다. 그림자가 여기에 설명되어 있습니다 : http://stackoverflow.com/a/16063711/1641941까지 프로토 타입 값을 가지고 보장; 데이비드의 대답은 당신이 사용해야하는 것입니다. – HMR

답변

2

(예제에서 알 수있는 한) 프로토 타입 속성에 액세스하려면 MyClass 만 인스턴스화 했으므로 왜 중개자를 자르지 않으십니까?

return { 
    propA: MyClass.prototype.propA, 
    propB: MyClass.prototype.propB 
}; 
1

두 번째 방법은 하나의 인스턴스 만 생성하고 사용하므로 CPU 시간과 메모리가 적기 때문에 두 번째 방법이 더 효율적으로 보입니다.

첫 번째 예에서는 2 개의 MyClass 인스턴스를 만들고 각각에서 1 개의 속성을 반환합니다.

두 번째 단계에서는 MyClass의 새 인스턴스를 만들고 그 인스턴스에 대한 참조를 myObject에 저장합니다.

관련 문제