sitelink1 | https://developer.mozilla.org/ja/docs/We..._Accessors |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
개요
멤버 연산자는 객체의 속성 또는 메서드에 대한 액세스를 제공합니다.
객체는 실제로는 연관 배열 (일명 map , dictionary , hash , lookup table )입니다. 이 배열의 키 는 속성 및 메소드 (함수를 참조하는 속성)의 이름입니다. 속성에 액세스하려면 두 가지 방법이 있습니다. 도트 표기법과 브라켓 표기법 (일명 첨자 연산자)입니다.
참고 : ECMAScript 사양은 이러한 연산자를 "member operators"보다는 "property accessors"라고 부르고 있습니다.
도트 표기법
get = object.property; object.property = set;
property
는 유효한 JavaScript 식별자, 즉 숫자로 시작하지 말라 밑줄 ( " _
") 및 달러 기호 (" $
")를 포함한 숫자의 연속이어야합니다. 예를 들어object $ 1
은 유효하지만 object.1
은 그렇지 않습니다.
// 예
document . createElement ( 'pre' ) ;
여기에서는 메소드 이름 "createElement"이 document
에서 검색되고이라고합니다.
브래킷 표기법
get = object [property_name]; object [property_name] = set;
property_name
은 문자열입니다. 이 문자열은 유효한 식별자 일 필요는 없습니다. 예를 들어 "1foo" "! bar!", 또는 ""(공백)이든지 어떠한 값을 가질 수 있습니다.
// 예
document [ 'createElement' ] ( 'pre' ) ;
이것은 앞의 예와 똑같은 것입니다.
속성 이름
속성 이름은 문자열이어야합니다. 이것은 문자열이 아닌 객체가 객체의 키로 사용할 수 없다는 것을 의미합니다. 숫자를 포함하는 모든 문자열이 아닌 객체는 toString
메소드를 통해 문자열 형태 변환됩니다.
// 예제
var Object = { } ;
object [ '1' ] = 'value' ;
alert ( object [ 1 ] ) ;
이것은 1가 '1'로 형태 변환 된 후 "value"를 출력합니다.
var foo = { unique_prop : 1 } , bar = { unique_prop : 2 } , object = { } ;
object [ foo ] = 'value' ;
alert ( object [ bar ] ) ;
이것 또한 foo와 bar가 모두 같은 문자열로 변환 된 후 "value"를 출력합니다. SpiderMonkey JavaScript 엔진은이 문자열은 "[object Object]"이 될 것입니다.
메소드의 속박
메소드는 그 메소드의 객체에 속박되어 있지 않습니다. 특히 this
는 메소드 내에서 고정되지 않습니다. 즉, this
는 반드시 그 메소드를 포함한 객체를 참조 할 필요가 없습니다. this
대신 함수 호출을 통해 "전달됩니다."
" 메소드의 속박 "을 참조하십시오
eval
상의주의
JavaScript 초보자는 종종 대신 브래킷 표기법을 사용할 수있는 곳에서 eval
을 사용하는 실수를합니다. 예를 들어 다음과 같은 구문입니다.
// before
x = eval ( 'document.form_name' + strFormControl + '.value' ) ;
eval
은 저속이기 때문에 가능한 한 피하고 대신 브래킷 표기법을 사용하는 것이 좋습니다.
// After
x = document . form_name [ strFormControl ] . value ;