2013-12-16 2 views
2

이 프로토 타입 함수가 false를 반환 할 수 있습니까? 아니면 항상 true를 반환하는 무의미한 검사입니까?'this'가 프로토 타입 함수에서 정의되지 않았습니까?

if (!Date.prototype.hasOwnProperty("foo")) { 
    Date.prototype.foo = function() { 
     var date = this; 
     if (!date) { 
      return false; 
     } 
     return true; 
    } 
} 
+0

'this'는'Date' 객체이거나 함수가'this'의 일종을 얻는 지 확인하고 있습니까? (당신은'this'를 매우 쉽게 만들 수 있습니다.) –

+0

조건부로 프로토 타입을 할당하는 것은 (가능할지라도) 기이하게 복잡 할 수 있습니다. 당신은 당신이 조건부로 그것과 같은 프로토 타입에 할당 할 필요가 있다고 확신합니까? – Sukima

+0

그것은 내가보고있는 프로토 타입의 꼭대기에있는 코드 조각입니다 ... 내가 그것을 제거 할 수 있을지 궁금해 할 때, 그것이 맞을 수있는 방법을 생각할 수 없었습니다. 'this '가 호출 변수가 될 수 없다는 방법이 있습니까? 'var date = new Date(); date.foo();'? – joshschreuder

답변

4

strict mode이 활성화 된 경우 자바 스크립트의 this 키워드는 undefined입니다. 그렇지 않으면, 기본적으로 window 객체, 하지 않으면 다음 중 하나에 해당하는을 참조합니다 :

  • call() 또는 apply()
  • 을 사용
  • 다른 객체가 this에 바인딩 된 new 연산자를 사용하여 호출되는 함수
+0

+1 : 문서 [call] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/)에 대한 링크입니다. Global_Objects/Function/call)/[적용] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects % 2FFunction % 2Fapply) ": 메서드가 비 엄격 모드 코드의 함수이면 null과 undefined가 전역 객체로 바뀝니다." –

+0

이렇게하면, 엄격한 모드에 있고'Date.prototype.foo.call (undefined)'또는'.apply (undefined)'라고 불렀을 때 이것이 일어날 수있는 유일한 방법입니까? – joshschreuder