# Lesson-0
===
首先第一個版本,我們要先了解搭建一個庫或者是一個給別人使用的小插件應該用一種什么樣的格式.
首先我們需要創建一個閉包
```javascript
(function(){
//code..
})();
```
然后將我們所需要的代碼和邏輯都寫在里面避免全局變量的泛濫.
接著我們來看看我們第一版里的代碼.
```javascript
(function(window,document) {
var w = window,
doc = document;
var Kodo = function(selector) {
return new Kodo.prototype.init(selector);
}
Kodo.prototype = {
constructor : Kodo,
length : 0,
splice: [].splice,
selector : '',
init : function(selector) {//dom選擇的一些判斷
}
}
Kodo.prototype.init.prototype = Kodo.prototype;
Kodo.ajax = function() { //直接掛載方法 可k.ajax調用
console.log(this);
}
window.f = Kodo;
})(window,document);
```
我創建了一個閉包,傳入了window,document并且在內部將他們緩存起來.
接著
```javascript
var kodo = function(selector) {
return new Kodo.prototype.init(selector);
}
```
如果有看過jQuery源碼的童鞋對這個真是在了解不過了.每次用kodo調用的時候,將直接 返回一個kodo的實例.達到無new調用的效果
```javascript
Kodo.prototype = {
constructor : Kodo,
length : 0,
splice: [].splice,
selector : '',
init : function(selector) {//dom選擇的一些判斷
}
}
Kodo.prototype.init.prototype = Kodo.prototype;
```
接著重點就在于如何去構造Kodo的prototype的原型了.在這上面的屬性也就相當于是jQuery的實例方法和屬性.所以每次$()后都能鏈式調用.
由于我們是return new Kodo.prototype.init,那自然,我們需要手動的把init的prototype指向Kodo的prototype
同時我們在原型上具有splice屬性后,我們的對象就會變為了一個類數組對象,神奇吧!
```javascript
Kodo.ajax = function() { //直接掛載方法 可f.ajax調用
console.log(this);
}
```
由于javascript中一切皆對象,所以我們能在我們的Kodo上直接用.XXX來賦予新的屬性和方法,這樣的方法也被稱之為靜態方法.
```javascript
window.f = Kodo;
```
最后我們在window上對外暴露一個接口,我們就可以愉快的用 f.ajax 或者是 f("#id")即可調用.
雖然我很low,但是你看都看完了難道還不給star?!