2014-11-06 3 views
0

내가 타이프 거의 새로운 (그리고 OOP에)있어 인스턴스화되어 있는지 확인하고 나는 같은 모듈이 다음 내가 온 클릭 기능 요소를보다타이프 클래스가 이미

module SIMULATOR { 
    export class myClass extends myBaseClass{ 
     constructor(){ 
     //Make a div and append it to body 
     } 
    } 
} 

그 이 같은 myClass가 전화 :

$(button).on('click',()=> { 
    if(//class hasn't been instantiated yet){ 
     var myDiv = new SIMULATOR.myClass(); 
    } 
    else{ 
     //do other stuff (eg: delete myClass instance) 
    } 
}); 

내 첫 번째 목표는 myClass가 이미 인스턴스화 된 경우 내가 확인할 수있는 방법을 이해하는 것입니다.

나중에 jquery를 사용하여 만든 div를 파괴하고 myClass 인스턴스도 "파괴"하는 방법을 알고 싶습니다. 질문은 어리석은 것처럼 보일 수 있습니다 경우

내가 사과 : 나는 그것은 일반 자바 스크립트를 확인 같은 것입니다 초보자 :

+0

외부 추적 메커니즘없이 클래스가 인스턴스화되었는지 알 수있는 방법이 없습니다. 단추와 관련된 데이터에 클래스의 인스턴스를 추가하는 것이 좋습니다. 예 :'on' :'$ (button) .data ('myClass', myDiv)'. 이미 if ($ (button) .. data ('myClass')) {// myClass가 이미 인스턴스화되었다}를 통해 이미 존재하는지 확인할 수 있습니다. 이 태그는 jQuery를 태그로 추가하지 않은 것으로 가정하므로이 태그를 대답으로 추가하지 않았습니다. –

+0

좋아, 버튼에 데이터 속성을 추가하는 것이므로 데이터 속성이있는 경우 버튼이 이미 클릭되었습니다. 이 해결 방법을 솔루션입니다, 나는 또한 클래스 속성을 추가 할 수있는 사실을 생성자 내부에 설정하고 그것을 onclick 함수에서 확인하십시오. 나는 더 깔끔한 해결책을 찾고 있었다. 추신 : Jquery 태그를 추가;) – Plastic

답변

1

당신이 jQuery를 : 사용하고 있기 때문에 도움이 내가 이런 짓을 했을까 방법은 다음과 같습니다

실제로 jQuery의 데이터 구조 클래스의 인스턴스를 저장이
$(button).on('click',()=> { 
    var myDiv: SIMULATOR.myClass = $(button).data('myClass'); 
    if(myDiv){ 
     //do other stuff (eg: delete myClass instance) 
    } 
    else { 
     // myDiv has not been instantiated 
     myDiv = new SIMULATOR.myClass(); 
     $(button).data('myClass', myDiv) 
    } 
}); 

, 메모리에는 data- 속성이 아닙니다. 인스턴스가 데이터 구조에 있다면, 당신은 잘해야합니다. 그렇지 않은 경우, 데이터 구조를 작성하여 데이터 구조에 추가하십시오.

데이터 구조에서 인스턴스를 제거하려면 $(button).data('myClass', null);을 사용하십시오.

개체를 처리하지는 않지만 JavaScript 엔진이이를 가비지로 수집하도록 참조를 제거합니다.

+0

으로 확인할 수 있습니다. 이것은 매력처럼 작동합니다! 그리고 그 인스턴스를 지우고 싶다면? $ (버튼). 데이터 (''); 그것을 삭제할 것인가? – Plastic

+0

'$ (버튼).data ('myClass', null);'이 제거됩니다. –

+0

고마워요. 제게 많은 도움이됩니다. 내 프로젝트와 내 이해에. – Plastic

0

을 해요. 해당 객체가 null 또는 undefined

인 경우 볼 필요가 있습니다. Typescript는 개발을 돕기에 좋지만 모든 것이 일반 자바 스크립트로 런타임에 컴파일됩니다.

+0

부엉 "typeof"을 의미합니까 ?? – Plastic

+0

당신은 어떤 시점에서 그것을 만들 필요가 있다는 것을 의미합니다 ... 'var myClass' 그리고 나서 다른 곳에서 그것을 인스턴스화하십시오 (또는 바로 그때 그것을 검사하는 것은 항상 사실 일 것입니다 ...). 'myClass = new Simulator.MyClass()'이고 다른 곳에서는'if (myClass === 'undefined'|| myClass === null)' – John

0

로컬 범위 변수를 myDiv로 사용하면 초기화되지 않습니다. 나는 당신의 인라인 함수 밖에서 그것을 움직일 것을 권한다. John은 null 또는 undefined를 확인하기 만하면된다. 따라서 변수 이름을 if stages에 nulls로, undefined를 false로 지정할 수있다.

var myDiv; 
$(button).on('click',()=> { 
    if(!myDiv){ 
     myDiv = new SIMULATOR.myClass(); 
    } 
    else{ 
     //do other stuff (eg: delete myClass instance) 
    } 
}); 

희망이 여기에,