jQuery의 충돌 방지 메커니즘
2977 단어 jquery
작성자: 나라의 훌륭한 사람 |시간: 2013-03-12 11:33
많은 JS 프레임워크 라이브러리에서 $기호를 함수나 변수 이름으로 사용하는데, jQuery는 그 중에서 가장 전형적인 것이다.jQuery에서 $기호는 window입니다.jQuery 대상의 인용입니다. $가 삭제되더라도 window.jQuery는 여전히 전체 라이브러리의 완전성을 보장하는 튼튼한 뒷받침이다.jQuery의 API 디자인은 다중 프레임워크 간의 인용 충돌을 충분히 고려했기 때문에 우리는 jQuery를 사용할 수 있다.noConflict 방법으로 제어권 전환을 쉽게 실현할 수 있습니다.
jQuery.noConflict 방법에는 $참조를 인계하는 동시에 jQuery 객체 자체를 인계할지 여부를 결정하는 선택할 수 있는 부울 매개 변수가 포함되어 있습니다[1].
jQuery.noConflict([removeAll])
기본적으로 noConflict를 실행하면 $변수 제어권을 $생성된 첫 번째 라이브러리에 넘깁니다.removeAll이true로 설정되었을 때, noConflict를 실행하면 $와 jQuery 대상 자체의 제어권을 첫 번째 라이브러리에 넘깁니다.
예를 들어 KISSY와 jQuery를 혼용하고 $= KISSY를 관용하여 API 조작을 간소화할 때 이 방법을 통해 명칭 충돌 문제를 해결할 수 있다.
그렇다면 이 메커니즘은 어떻게 실현되었을까?jQuery 원본의 시작을 읽는다[2]. 가장 먼저 하는 일은 다음과 같다.
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
쉽게 이해할 수 있는 것은, jQuery는 두 개의 개인 변수를 통해 window 환경에서 jQuery와 $두 개의 대상을 비추어 변수가 강제로 덮어쓰지 않도록 합니다.noConflict 메서드가 호출되면jQuery, _$, jQuery, $4자 간의 차이로 제어권의 이관 방식을 결정합니다. 구체적인 코드는 다음과 같습니다.
noConflict: function( deep ) {
if ( window.$ === jQuery ) {
window.$ = _$;
}
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}
return jQuery;
}
위에서 말한 매개 변수 설정 문제를 다시 보십시오. 만약 deep이 설정하지 않았다면 $window.$덮어쓰기,이 때 jQuery 별명 $은 효력을 상실했지만, jQuery 자체는 손상되지 않았습니다.만약 다른 라이브러리나 코드가 $변수를 다시 정의한다면, 제어권은 완전히 넘겨집니다.반대로 deep이true로 설정되면jQuery가 window를 덮어씁니다.jQuery, $및 jQuery가 효력을 상실합니다.
이러한 조작의 장점은 프레임워크 혼용이든 jQuery 멀티버전이든 고도의 충돌이 공존하는 실행 환경이든 noConflict 방법이 제공하는 이관 메커니즘과 그 자체가 덮어쓰지 않은 jQuery 대상을 되돌려주기 때문에 변수 매핑을 통해 충돌을 완전히 해결할 수 있다는 것이다.
그러나 플러그인의 실효 등 문제를 피할 수 없습니다. 물론 상하문 파라미터를 간단하게 수정하면 $별명을 복구할 수 있습니다.
var query = jQuery.noConflict(true);
(function ($) {
// , jQuery
})(query);
[1] http://api.jquery.com/jQuery.noConflict/#jQuery-noConflict-removeAll [2] https://github.com/jquery/jquery/blob/master/src/core.js
태그: jQuery
주소: http://ued.taobao.com/blog/2013/03/jquery-noconflict/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.