怎樣寫一個js插件

js插件的形式有很多種,這裏我分享一個自己比較熟識的,ES5語法,先預覽,再講解

;(function(global) {
    "use strict";
    var MyPlugin = function(options) {

    };

    MyPlugin.prototype = {
        init: function() {

        }
    };

    if (typeof module !== 'undefined' && module.exports) module.exports = MyPlugin;
    if (typeof define === 'function') define(function() { return MyPlugin; });
    global.MyPlugin = MyPlugin;

})(this);

這種寫法用於創建一個類,雖然ES5沒有真正意思上的類,只能用function模擬,我們也暫且稱之爲類,ES6有class關鍵字,這裏不作詳述。如上代碼兼容CommonJs/AMD/CMD規範,較爲通用。註解如下:

//;分號開頭,用於防止代碼壓縮合並時與其它代碼混在一起造成語法錯誤
//而事實證明,uglify壓縮工具會將無意義的前置分號去掉,我只是習慣了這麼寫

//(function(){})();立即執行函數,閉包,避免污染全局變量
//通常一個插件只暴露一個變量給全局供其它程序調用
//還有其它寫法,運算符+函數體+括號
//例:!function(){}(); +function(){}(); -function(){}();
//    void function(){}(); 等等只要能對函數返回值進行運算的符號都可以
;(function(global) {

    //開啓嚴格模式,規範代碼,提高瀏覽器運行效率
    "use strict";

    //定義一個類,通常首字母大寫
    var MyPlugin = function(options) {

    };

    //覆寫原型鏈,給繼承者提供方法
    MyPlugin.prototype = {
        init: function() {

        }
    };

    //兼容CommonJs規範
    if (typeof module !== 'undefined' && module.exports) module.exports = MyPlugin;

    //兼容AMD/CMD規範
    if (typeof define === 'function') define(function() { return MyPlugin; });

    //註冊全局變量,兼容直接使用script標籤引入該插件
    global.MyPlugin = MyPlugin;

//this,在瀏覽器環境指window,在nodejs環境指global
//使用this而不直接用window/global是爲了兼容瀏覽器端和服務端
//將this傳進函數體,使全局變量變爲局部變量,可縮短函數訪問全局變量的時間
})(this);

接下來動手開發一個可以修改div背景顏色的插件

  • modify_div_bg.js
;(function(global) {
    "use strict";
    var M = function(el) {
        this.el = typeof el === "string" ? document.querySelector(el) : el;
    };

    M.prototype = {
        setBg: function(bg) {
            this.el.style.background = bg;
        }
    };

    if (typeof module !== 'undefined' && module.exports) module.exports = M;
    if (typeof define === 'function') define(function() { return M; });
    global.ModifyDivBg = M;

})(this);
  • index.html
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>怎樣寫一個js插件</title>
    <script src="./modify_div_bg.js"></script>
</head>
<body>
    <div id="div">怎樣寫一個js插件</div>
    <script>
    var mObj = new ModifyDivBg("#div");
    mObj.setBg("#f00");
    </script>
</body>
</html>

將modify_div_bg.js和index.html的代碼放到同一個目錄,用Chrome瀏覽器打開index.html就可以看到效果了。打開調試控制檯(windows按F12,Mac按option+command+i),在Console裏輸入mObj.setBg("#ff0");回車,將會修改div背景顏色。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章