fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[js] 第156天 用原生JS封装插件的方式有哪些?

Open haizhilin2013 opened this issue 5 years ago • 3 comments

第156天 用原生JS封装插件的方式有哪些?

haizhilin2013 avatar Sep 18 '19 20:09 haizhilin2013

一般的插件封装

;(function (global) { 
  "use strict";
  function MyPlugin(el, options) {
    //some cod
  };
  MyPlugin.prototype = {
    //定义方法
    show: function () {
      //some code
    }
 };
  if (typeof module !== 'undefined' && module.exports) {    //兼容CommonJs规范 
    module.exports = MyPlugin;
  } else if (typeof define === 'function') {   //兼容AMD/CMD规范
    define(function () {
      return MyPlugin
    })
  } else {    //注册全局变量,兼容直接使用script标签引入插件
    global.MyPlugin = MyPlugin;
  }
})(this);

gkf442573575 avatar Sep 19 '19 07:09 gkf442573575

还有像 jquery 那种 var $ = function() { return $.fn.init }; $.fn = {}; $.fn.init = function(){} 这种的; 或者 Object.defineProperty(String.prototype, 'red', { get: function(){ return this + 'red' } }) 这种的。

不只有 fn()new func() 这样的插件,也有 fn.func()fn.func 这样的插件的存在。

forever-z-133 avatar Sep 19 '19 08:09 forever-z-133

可以用自执行函数 var $ = ((global){ return {} })(this)

xiaoqiangz avatar Jul 26 '22 09:07 xiaoqiangz