일반 멤버 연산자

황제낙엽 2014.12.30 14:59 조회 수 : 47

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 ;