2013-05-15 4 views
0

나는 clock이라는 객체를 가지고 있습니다.OOP에 대한 몇 가지 질문

나는 시간이라는 객체를 가지고있다.

내 시간 메서드 내에서 this.propertyName을 사용하면 내 시계 개체에 속성이 적용됩니다. 하지만 if/else 문 (시간 메서드 자체 내에 있음)이있는 경우, 예를 들어 전에 값을 할당해야 할 필요가 있습니까?

if(t.getHours() >= 12){ 
     this.ap = "AM"; 
    }else{ 
     this.ap = "PM"; 
    } 

따라서 this.ap = "hi"와 같은 간단한 값을 사용하면 정상적으로 작동합니다. 그것은 내 물건에 물건을 준다. 위와 같이 선언문을 작성하면 속성이 정의되지 않습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

또 다른 빠른 질문은 나만의 개체를 사용하기 시작한 것이기 때문에. 3 개의 개별 메서드가있는 개체가 있고 1 메서드 내에서 선언 된 모든 메서드의 값을 사용하려면 개체의 속성으로 할당하면이 작업을 수행 할 수 있습니다. 내가 맞습니까?

그래서 하나의 메서드에서 var property = ""를 사용하면 다른 메서드에서이 메서드에 액세스하는 유일한 방법은 반환하는 것입니다. 그러나 객체에 속성을 설정하면 해결됩니다. 나는 이것으로 주위를 실험 할 수 있다는 것을 알았지 만, 나는 적절한 방법을 알고있을 것입니다.

편집 : 예를 들어 보겠습니다. 분명히 나는 ​​오해하고있다. 메서드 내에서 속성을 정의하는 것처럼 보이지 않습니다.

var MyObject = function() { 
    var self = this; 
    self.someProperty = "foo"; 

    self.someMethod() { 
     self.someProperty = "bar"; 
    } 
} 

var anInstance = new MyObject(); 
console.log(anInstance.someProperty);  // foo 
anInstance.someMethod(); 
console.log(anInstance.someProperty);  // bar 

this이 따라 일어날 수있는이 될 당신이 예상하는 것보다 다른 뭔가되는 문제를 피할 수 :

var clock = {}; 

clock.test1 = "test 1."; 

clock.time = function(){ 

    clock.test = "test 2."; 

    if(t.getHours() >= 12){ 
     clock.ap = "PM"; 
    }else{ 
     clock.ap = "AM"; 
    } 

} 

alert(clock.test1); //success 
alert(clock.test); //returns undefined 
    alert(clock.ap); //returns undefined 
+2

코드를 더 표시해야합니다. 'this '의 바인딩은 JavaScript에서 다소 까다 롭습니다. 일반적인 해결책은'that' 또는'self' 또는 당신의 객체와 비슷한 것을 추가하고 객체를 생성 할 때'this'를 할당하는 것입니다. 그렇게하면 항상 객체 자체에 대한 참조가 생깁니다. –

+0

'=>'은 구문 오류이므로'> ='이어야합니다. 't.getHours'에서't'는 무엇입니까? ('getHours'는't.getHours()'와 함께 호출되는 함수가 아닙니까?) – nnnnnn

+0

^실제로 이것을 가리켜 주셔서 감사합니다. getHours를 함수로 입력한다는 의미였습니다. –

답변

2

this 바인딩 문제를 피할 수있는 일반적인 방법은 같은 것을 할 것입니다 어떻게 메소드를 호출하는지 (예 : 일부 DOM 이벤트의 핸들러로 메소드 사용).

이 예제는 closure을 악용하여 작동합니다.이 내용은 자바 스크립트에서 매우 중요한 개념으로 Google에서 읽어야합니다.