한동안 서로 다른 JS 라이브러리의 캡슐화를 혼동한 끝에 마침내 단서를 얻었습니다. 대략:
그래서 찾아본 jQuery의 초기 버전은 1.7.1 입니다. 캡슐화 코드는 대략 다음과 같습니다
그 중
비슷한 패키지를 만들 수 있도록
}
})(창)
1. jQuery 기호 및 전역 호출 정의
2.비동기식 지원
그래서 이전 jQuery 패키지를 찾아봤는데 방법은 거의 같았습니다. .
var $ = jQuery;
};
이전 단계의 jQuery를 다시 작성할 수 없을 정도로 마법 같은 판단 방법입니다. 그래서 최신 jQuery 패키지가 어떤 모습인지 살펴봐야 했습니다. 그래서 2.1.1을 열어보니 많은 기능이 추가된 것 외에 기본적인 아이디어는 그대로 남아있습니다
if (모듈 유형 === "객체" && typeof module.exports === "객체") {
module.exports = global.document ?
공장(글로벌, 참) :
함수(w) {
if (!w.document) {
throw new Error("jQuery에는 문서가 있는 창이 필요합니다.");
}
공장반품(w);
};
} 그 밖의 {
공장(글로벌);
}
}(창 유형 !== "정의되지 않음" ? window : this, function(window, noGlobal) {
var jQuery = 함수() {
console.log('jQuery');
};
if (typeof 정의 === "함수" && 정의.amd) {
정의("jquery", [], function() {
jQuery를 반환합니다.
});
};
strundefine = 정의되지 않은 유형;
if (noGlobal 유형 === strundefine) {
window.jQuery = window.$ = jQuery;
};
jQuery를 반환합니다.
}));
백본 封装
Backbone看了一下
if (typeof 정의 === 'function' && 정의.amd) {
정의(['밑줄', 'jquery', '내보내기'], function(_, $, 내보내기) {
root.Backbone = 공장(루트, 내보내기, _, $);
});
} else if (내보내기 유형 !== '정의되지 않음') {
var _ = require('밑줄');
공장(루트, 내보내기, _);
} else {
root.Backbone = Factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));
}
}(this, 함수(루트, 백본, _, $) {
백본.$ = $;
백본 반환;
}));
除了异步支持,也体现了其对于jQuery와 밑줄이 있는 依赖,百
밑줄 封装
于是,又看了看Underscore,发现这个库又·领了一个符号 _
if (내보내기 유형 !== '정의되지 않음') {
If (모듈 유형 !== '정의되지 않음' && module.exports) {
내보내기 = module.exports = _;
}
수출._ = _;
} 그 밖의 {
루트._ = _;
}
if (정의 유형 === '함수' && 정의.amd) {
정의('밑줄', [], function() {
반품 _;
});
}
}.call(this));