2010-04-23 4 views
18

JavaScript를 코딩하는 중 때때로 객체 this의 참조를 로컬 변수에 다른 용도 (적절한 범위 설정, 코드 난독 화기 등)로 저장합니다. 앨리어싱을 선호하는 코더는 의도를 분명히하기 위해 this에서 that까지 있습니다. 다른 사람들은 객체 자체를 가리키고 있기 때문에 self을 사용합니다. 나는 심지어 me이 참조를 보유하고 여전히 의미가있는 소스 코드를 보았다. 물론 다른 것들도 있습니다.그 자체 또는 나 - 자바 스크립트에서 어느 것을 선호합니까?

어느 것을 선호합니까? 사용법이나 맛이 문제 일뿐입니다.

+1

프로그래밍 배경은 스몰 토크 나 파이썬을 사용하거나 (d) 중요한 그 (것)들을 사용한 그들에서, "각자"를 사용 해 경향이있다. – outis

답변

42

저는 개인적으로 that을 사용합니다. 그러나 그 밖의 모든 것이 명확합니다.

window에 대한 참조로 글로벌 변수/window -property self이 이미 존재하기 때문에 self을 사용하지 않을 것입니다.

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

반면 :

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

이 완전히 쓸모 (그래서 아무도 당신이 그것을 미행하고 있다는 걱정 할 것 없다)하지만, 약간 바보 오류의 위험이 유엔 - 눈치가는 증가 가볍게 고안되었지만 JavaScript가 오류를 미루는 것에 너무 싫은 경우 더 이상 그렇게하지 않으려 고합니다.

+0

또 다른 문제는 'self'에 할당 할 때'var'을 잊어 버리는 것입니다. IE *는 이것을 싫어합니다. –

+0

그래, 좋은 옛날 IE와 그것의 할당 - 투 - 윈도우 - 속성 재미. 그래도 적어도 나쁜 행동을했음을 알리는 오류가 발생합니다. 오류 메시지가 오해의 소지가 있더라도. – bobince

2

사과 바구니에 오렌지가 있습니다. this은 매우 구체적인 문맥 상 의미가 있습니다. 선택 사항은 실제로 해당 옵션 중 selfme 사이입니다. 그것들 사이에서 ... 당신이 선택하면 그것은 단지 개인적인 선호도 어느 쪽이든 상관 없습니다.

this은 혼란이 많고 오류를 쉽게 일으키지 않는 "옵션"이 아닙니다. selfme (예제 코드, 프레임 워크, 라이브러리 등)보다 훨씬 많이 사용됩니다. 그것은 단지 선호지만, 나는 동의한다. self는 더 매력적이다, 확실하지 않다. .. 다시 단지 나의 환경 설정.

+2

나는 '글자'라는 글자가 두 글자 적기 때문에 좋아하지만, 일관성있는 한 실제로는 중요하지 않습니다. –

+2

@codeka - 좋은 점, 일관성은 여기에서 이름의 선택보다 더 중요합니다 * –

+2

일관성에 합의했습니다. 선택이 다른 언어에 대한 프로그래머의 경험을 배반하는 것일 수도 있습니다. 'self'는 델파이의'this'의 버전이고'me'는 VB의 버전입니다. 내가 아는 한, '그'는 다른 어떤 언어에서도 사용되지 않습니다. –

1

글쎄 개인적으로 나는 "나중에 필요한 것"보다 조금 더 변수를 만드는 데 더 익숙해 지려고 노력하고 있습니다. 종종 일시적으로 변하는 변수가 필요합니다. 두 번째 이상의 임시 층이있을 수 있습니다.

따라서, jQuery를 설정에서, 예를 들어, 내가 임시 this 은닉가 보유해야하는 요소 유형주의하는 무언가를 사용할 수 있습니다 :

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

변수의 "$"접두사를 사용하는 것은 좋은 방법입니다 객체가 "jQuery -ized"되어 있는지 여부를 추적하기 위해 :-)

관련 문제