2012-07-19 4 views
1

나는 개체의 인스턴스를 필요로하는 클래스가 있습니다AS3은 선택 객체와 클래스의 인스턴스를

public class FusePumpComboBox extends Sprite 
{ 
    private var _rowCount; 

    public function FusePumpComboBox(args:Object) 
    { 
     _rowCount = (args.rowCount !== undefined) ? args.rowCount : 5; 
    } 
} 

를 내가 그에게이 같은 행의 수와 instantaiate 통과하지 않으려면 :

var obj:FusePumpComboBox = new FusePumpComboBox(); 

당신이 기대하는 것처럼, 나는 논쟁의 수와 일치하지 않는 오류를 얻습니다. 나는 args:Object에 디폴트 값을 주려고 시도했다 ... 이것이 해결책이있는 곳이라고 생각한다. 무엇을 줄 것인지, 어떻게 (args:Object = {}) 작동하지 않는지 알 수 없다.

편집 : 나는 또한 당신은 기본 값으로 null을 사용하고 args이 메소드 내 null 경우 확인할 수 있습니다

답변

1

이 작업을 시도 할 수 :

public function FusePumpComboBox(args:Object=null) 
{ 
    _rowCount = (args && args.hasOwnProperty('rowCount')) ? args.rowCount : 5; 
         //  ^----- The correct way of checking the properties 
} 
+0

완벽한 감사합니다 :) –

0

... getter 및 setter있을 것이다.

JavaScript에서 (설정이있는 개체를 구문 분석하는) 일반적인 경우이지만 OOP의 컨텍스트에서 계속하는 것은 좋지 않습니다.

+0

그 중 하나입니다 - 감사합니다 :) –

+0

마지막 편집에 대해 자세히 설명해 주시겠습니까? 생성자를 사용하여 속성 값을주는 데는 어떤 위험이 있습니까? –

-1

답변 위의 솔루션을 명확히.

단점 참고 : 인수를 생성자에 전달하는 것은 나쁜 패턴입니다.

getter 및 setter를 사용하여 속성을 유지하는 것이 좋습니다.

구문 분석 복잡한 객체 args는 클래스 "자체"기능이 아닌 것으로 이해하는 바깥에서 수행해야합니다.

+0

정말요 ?? 나는 오히려 모든 '설정'후에 그것을 다시 그리기보다 인스턴스 생성 중에 콤보 세트의 크기를 가질 것입니다. 확실히 그게 덜 효과적일까요? 제발 좀 더 자세히 설명해 주실 수 있습니까? –

+0

개체 인스턴스 생성 후 생성자 또는 인스턴스에서 무언가를 수행하는 것은 런타임 중에 한 프레임에서 발생합니다. 실제 그리기는 개체 유효성 검사를 연기하는 것이 좋습니다. 이것은 Flex 구성 요소 프레임 워크가 구성되는 방법입니다. Flex UI 구성 요소가 생성자 인수를 선언하지 않는다는 것을 알 수 있습니다. – skovalyov

+1

Flex 구성 요소는 이러한 방식으로 작동하므로 MXML에서 속성을 마크 업하고 MXML과 AS의 무결성을 유지할 수 있습니다. 오브젝트를 인스턴스화하고 생성자의 모든 특성을 지정하는 것보다 오브젝트의 모든 설정자를 호출하는 데 더 많은 오버 헤드가 있습니다. 드로잉 연기는 두 경우 모두 Event.ADDED_TO_STAGE를 통해 수행 할 수 있기 때문에 무의미합니다. – joncys

관련 문제