2014-04-09 3 views
0

에 자신의 재산을 사용할 수 없습니다.나는 다음과 같은 코드를 이해하기 위해 노력하고있어 자바 스크립트 객체의 기능

두 개의 값 속성과 함수 속성이있는 JavaScript 개체를 만들고 있습니다. 그런데 왜 함수가 editBox을 사용할 수 없습니까? 시도하면 정의되지 않습니다.

그리고 어떻게 _editBox을 사용할 수 있습니까? 함수가 호출 될 때 훨씬 늦을 수 있습니다. 후드에서 사용할 수 있도록 일부 작업이 진행되고 있음을 이해하지만 어떻게 유효 할지를 어떻게 알 수 있습니까? 대신 editBox을 사용할 수 있다면 더 많은 의미가 있습니까?

다른 언어에서 온 것은 당연한 것입니다.

+0

처음에'_editBox'를 어디에 설정하고 있습니까? – Barmar

+0

'editBox'가 정의되지 않았습니다. 'x.editBox' (또는'this.editBox')를 사용하고 싶지만 – Ian

+1

@ Adam 나는 그렇게 생각하지 않습니다 ... http://jsfiddle.net/yBLsK/ – Ian

답변

4

왜 함수는 편집 상자를 사용할 수 없습니다? 시도하면 정의되지 않습니다.

이는 범위 내 변수가 아닌 객체의 속성입니다.

this.editBox 아마 작동합니다

(. 당신이 (즉, x.getExchangeRate()) 올바른 맥락에서 getExchangeRate를 호출

가정 그리고 어떻게 _editBox를 사용할 수 있습니까?

를 변수 범위에 있기 때문에.

함수가 호출 될 때 훨씬 늦을 수 있습니다.

정말 문제

이 어떻게 여전히 유효합니다 알고하지 않습니다

? 그것을 덮어 얻고 경우

당신 제어 할 수 있습니다.

+0

감사합니다.'this.editBox'가 필요한 것 같습니다. 그러나 마지막 질문과 관련하여, 변수'_editBox'는'getExchangeRate()'가 호출 될 때 * long * 사라질 것입니다. 그래서 나는 그것이 여기에 사용될 때 그것이 여전히 의미가 있다는 것을 어떻게 알 수 있는지 궁금해하고있었습니다. –

+0

@JonathanWood : 당신이 정의한 함수는 완전히 다른 범위에서 함수가 호출 되더라도'_editBox'에 접근 할 수있는 클로저입니다. 그건 폐쇄가 작동하는 방법입니다 :) –

2

editBox 같은 어떠한 변수가 없지만 _editBox 있기 때문에. 난 당신이 x을 참조 할 함수 내에서 다음 this, x.getExchangeRate()로 함수를 호출하고 해당 속성 editBox에 액세스 할 수 있으면 당신이

this.editBox.val() 

를 찾고 있습니다 생각합니다. See the MDN documentation for more information about this.


은 더 논리적 보이는 확실히이다, 다른 언어에서 오는 데.

JavaScript는 인스턴스 멤버가 자동으로 메서드의 범위에있는 자바와 비슷하지 않습니다. 함수와 객체 사이에는 암시 적 연결이 없으므로 속성 값이 있습니다. 왜냐하면 함수는 일류 객체이기 때문에 누구에게나 속하지 않습니다.JS에는 어휘 범위가 있습니다.

이 예제를 고려하십시오

var name = 'bar'; 

function foo() { 
    console.log(name); 
} 

var obj = { 
    name: 'baz', 
    prop: foo 
}; 

당신이 볼 수 있듯이, 우리는 obj에서 foo "독립적"정의. obj.nameobj.prop()이라면 마술처럼 함수 안에 name이되지 않습니다.

+0

그냥 내 dev에 시스템을 종료했다. 그러나 네,'this.editBox'가 사용 가능하다면 말이 될 것입니다. 내가 돌아올 때 시험 할 것이다. –

관련 문제