>  기사  >  웹 프론트엔드  >  jQuery-noCon충돌의 충돌 방지 메커니즘에 대한 간략한 분석

jQuery-noCon충돌의 충돌 방지 메커니즘에 대한 간략한 분석

巴扎黑
巴扎黑원래의
2017-06-20 15:18:191295검색


출처: Taobao UED

많은 JS 프레임워크클래스 라이브러리$ 기호를 함수로 사용하거나 변수 이름을 사용하도록 선택하세요. jQuery가 가장 일반적인 것입니다. jQuery에서 $ 기호는 단지 window.jQuery 개체의 참조이므로 $가 삭제되더라도 window.jQuery는 여전히 전체 클래스 라이브러리의 무결성을 보장하는 강력한 지원입니다. jQuery의 API 디자인은 여러 프레임워크 간의 참조 충돌을 완전히 고려합니다. jQuery.noConfluence 메서드를 사용하면 제어를 쉽게 전달할 수 있습니다.

jQuery.noConstrict 메소드에는 $ 참조를 전달할지 여부와 jQuery 객체 자체를 전달할지 여부를 결정하는 선택적 부울 매개변수 [1]가 포함되어 있습니다.

JavaScript

ㅋㅋㅋ


1


기본적으로 noConstrict를 실행하면 $ 변수의 제어권이 $를 생성하는 첫 번째 라이브러리로 전송됩니다. RemoveAll이 true로 설정된 경우 noConstrict를 실행하면 $ 및 jQuery 개체 자체의 모든 제어권이 세 번째 라이브러리로 전송됩니다. 그들을 생성합니다.

예를 들어 KISSY와 jQuery를 혼합하고 $ = KISSY를 사용하여 API 작업을 단순화하는 경우 이 방법을 사용하면 이름 충돌 문제를 해결할 수 있습니다.

그럼 이 메커니즘은 어떻게 구현되나요? 처음에 jQuery 소스 코드를 읽으면서[2] 가장 먼저 해야 할 일은 다음과 같습니다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ





JavaScript







1

2

3


4

5


                 

// 덮어쓸 경우 jQuery를 통해 매핑

                                       + ㅋㅋ                                      


jQuery는 변수가 강제로 덮어쓰이는 것을 방지하기 위해 두 개의 Private 변수를 통해 윈도우 환경의 두 개체인 jQuery와 $를 매핑하는 것을 이해하기 쉽습니다. noCon conflict 메소드가 호출되면 _jQuery, _$, jQuery, $의 차이를 사용하여 제어 전송 방법을 결정합니다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ





JavaScript







1

2

3


4

5

6

7

8


9

10

11


noconflictoc :

함수

(

deep

)

{

_

$

;                                       

               if ( deep && window. jQuery === jQuery ) {

= _jQuery _jQuery ;               }

              

return

jQuery ;        }

위에서 언급한 매개변수 설정 문제를 살펴보겠습니다. deep이 설정되지 않은 경우 _$는 window.$를 덮습니다. 이때 jQuery 별칭 $는 무효화되지만 jQuery 자체는 그대로 유지됩니다. 다른 라이브러리나 코드가 $ 변수를 재정의하는 경우 해당 변수에 대한 제어가 완전히 이전됩니다. 반면 deep을 true로 설정하면 _jQuery가 window.jQuery를 덮어쓰게 되며 $와 jQuery가 모두 유효하지 않게 됩니다.

이 작업의 장점은 프레임워크 혼합이나 jQuery 다중 버전 공존과 같이 충돌이 심한 실행 환경이더라도 noConfluence 메서드에서 제공하는 핸드오버 메커니즘과 발견되지 않은 jQuery 객체를 반환한다는 사실로 인해, 충돌을 해결하는 방법을 통해 완전히 매핑될 수 있습니다.

하지만 피할 수 없는 사실은 플러그인 장애 및 기타 문제가 발생할 수 있다는 점입니다. 물론, 간단히 컨텍스트 매개변수만 수정하면 복원이 가능합니다. $ 별칭:

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ





JavaScript







1

2

3


4

5

6

ㅋㅋㅋ

)


;


(

function ㅋㅋㅋ ;


[1] http://api.jquery.com/jQuery.noConstrict/#jQuery-noConstrict-removeAll

[2]

https://

github.com/jquery/jquery/blob/master/ src/core.js

위 내용은 jQuery-noCon충돌의 충돌 방지 메커니즘에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.