2011-12-09 5 views
2

메서드의 결과를 특성에 넣으려고했지만 오류가 계속 발생합니다. "잡히지 않은 TypeError : 개체 [개체 DOMWindow]에 메서드가 없습니다. 'ppp ' "자바 스크립트 개체 : 특성의 함수 또는 메서드

이 내 간단한 코드입니다 : 당신의 도움에 대한

var ttt = { 
    ddd: 'I said '+ this.ppp() + '!!!', 


    ppp:function(){ 
     return 'ok'; 
    } 
}; 
alert(ttt.ddd) 

들으 :)

답변

2
var ttt = { 
    ddd:function(){ 
     return 'I said '+ this.ppp() + '!!!'; 
    }, 


    ppp:function(){ 
     return 'ok'; 
    } 
}; 
alert(ttt.ddd()) 

이 OK입니다. 작성한 코드 인 ttt.ddd는 문자열이고 'this'는 브라우저의 창 객체입니다.

+0

Thx 모두, 즉 우리는 메서드에 의해 반환 된 값을 객체 내의 속성에 넣을 수 없습니다. 메서드 솔루션으로 이동합니다. 건배 – Marlene75

+0

함수 만 자바 스크립트에서 새 범위를 만들 수 있습니다. –

1

문제는 'this'가 창 객체를 참조한다는 것입니다.

이 해결하기 위해, 당신은 여전히 ​​DDD 경고하기 위해 원래의 코드를 사용할 수 있습니다이 시점에서 자동 실행 기능

var ttt = function() { 
function ppp(){ 
    return 'ok' 
} 

return { 
    ddd: 'I said '+ ppp() + '!!!', 
    ppp: ppp 
} 
}(); 

로 TTT를 돌 수 있었다

alert(ttt.ddd) 

조치를 취 하시려면 http://jsfiddle.net/aCeqt/

1

아니오 this.ppp()은 전역 범위 (이는 ppp에 대한 창 개체를 찾을 것임을 나타냄)가 함수 내에 있지 않기 때문에 javacript (함수 범위 만)의 블록 범위입니다. 다음과 같이

당신은 그것을 다시 작성할 수 :

var ttt = (function() { 
    var innerttt = { 
     ddd: function() { 
      return 'I said ' + this.ppp() + '!!!'; 
     }, 
     ppp: function(){ 
      return 'ok'; 
     } 
    }; 

    return innerttt; 
})(); 

alert(ttt.ddd()) 

이 DDD는 PPP를 호출하는 데 필요한 범위를 를 제공합니다 .. 부분 this.ppp의 의미()ppp

에 대한 자세한 내용을 보려면을 (를) 참조하십시오. http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/

+1

클로저에이 모든 것을 배치하는 것은 무엇입니까? 그것은 폐쇄없이 작동하는 것 같습니다. – Dogbert

+0

@Dogbert 당신은 아주 옳습니다. 질문을 잘못 읽고 대답을 복잡하게합니다! allenm의 대답은이 특정 질문에 대한 더 나은 대답입니다. – Dve

+0

좋은 해결책입니다. 그러나 ddd는 속성에서 일어날 필요가없는 기능으로 변경됩니다. –