js this 키워드_javascript 기술에 대한 질문

WBOY
풀어 주다: 2016-05-16 19:22:02
원래의
1013명이 탐색했습니다.

그러니 꺼내서 모두를 격려해 주세요.
먼저 다음 js 코드를 실행하세요



코드에 대한 설명은 다음과 같습니다.

foo.bar() // 인쇄 foo
//1. 경고는 toString 메서드를 암시적으로 호출하고 이를 문자열로 변환합니다. toString 메서드는 foo로 다시 작성되므로 foo

(foo.bar)();//입니다. print foo
//2 위의 실행은

(foo.bar || null)()
/*
3입니다. , Mozilla Firefox1.5.0.7과 Opera 9.0은 서로 다른 효과를 가지고 있습니다. Mozilla의 것은 foo입니다.
당분간은 ||의 JS 해석 방법에 대해 이야기하지 않겠습니다. bar 메소드가 적합합니다. 통과 후 | 🎜>
즉, 여기의 범위는 더 이상 foo 객체가 아니라 전역 범위입니다. 따라서 경고(this)는 경고(window)와 동일합니다.
객체

BTW: || 연산자는 두 표현식의 실행을 전역 범위 비교로 변환할 수 있습니다. IE 및 Opera(foo.bar || null)는 전역 참조를 반환합니다. 즉,
'bar': function () {
Alert(this);//여기서는 이미 Global this, global this입니다. , is window
},
자세한 내용은 기사 마지막 부분에
*/

bar = foo.bar();를 설명하는 코드를 추가하겠습니다. //반환되는 것은 "[object Window]"입니다.
/*4.
이것은 IE6.0, Mozilla Firefox1.5.0.7 및 Opera9.0의 동일한 객체입니다. 위의 실행에 대해 , 이 문장을 이해하는 것이 분명 더 쉽습니다
이유는 위와 동일합니다. 여기서 foo.bar의 참조는 전역 변수 bar에 제공되며 전역 변수는 모두 window의 참조에 종속됩니다. 다음 코드에서:
var a = 'never-online';
alert(this.a); //never-online
alert(window.a); //never-online
bar = foo.bar ; bar(); 다음 코드로 변경하면
foo.alert = foo.bar;
여기의 foo.alert는 여전히 foo 객체에 대한 참조이므로 foo 객체 This in은 여기에서 여전히 유효하며 bar 속성이 분명히 window이므로 window 객체가 되지 않았습니다.
foo.bar에 this가 있지만 this는 window로 참조됩니다.
*/

이 예를 다음과 같이 변경하면 다시 살펴보세요.



이유를 이해해야 합니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿