//方法一:将函数绑定到原型上
define(function(require, exports, module) {
$.fn.tab = function(option, callback) {
function bootstrap() {
console.log('djsakhdkj');
}
bootstrap();
}
$(function(){
$().tab();//因为将tab绑定到$原型上,所以要使用$().tab()去调用
})
}) //方法一(2):将函数绑定到jquery的原型上
define(function(require, exports, module) {
$.tab = function(option, callback) {
function bootstrap() {
console.log('djsakhdkj');
}
bootstrap();
}
$(function(){
$.tab();//因为将tab绑定到$原型上,所以要使用$.tab()去调用
})
})

上面两个的区别是:$.calendar();不依赖与页面中的元素,是独立的,比如弹窗插件,就是独立于页面的;

$.fn.calendar();一般是依赖于页面元素的额,比如这个日历插件,需要依赖于一个input标签中,比如点击该input则产生弹窗:$('input').calendar();这个弹窗位于该input的位置,等等;再例如tab切换插件中:

<div id="demo-content" data-ui="u-tab">
<ul>
<li class="cur" data-ui="tab-nav"><a href="javascript:void(0);">青春</a>
</li>
<li class="" data-ui="tab-nav"><a href="javascript:void(0);">彩虹</a>
</li>
<li class="" data-ui="tab-nav"><a href="javascript:void(0);">歌唱</a>
</li>
</ul>
<div class="tab-content">
<div data-ui="tab-content">tab1</div>
<div data-ui="tab-content">tab2</div>
<div data-ui="tab-content">tab3</div> </div>
</div>

调用该插件的时候就是使用的:$('#demo-content').tab();

所以日历插件有两种或思路:如果日历一直存在,则$('传入的是日历的class'),日历下所有的元素都是依赖于该class的;如果日历需要点击input中才能出现,则$('input').calendar();这时需要按照input生成点击事件弹出日历;日历的相对input的位置;

//方法二:直接写函数形式
define(function(require, exports, module) {
var tab = function(option, callback) {
function bootstrap() {
console.log('545');
}
bootstrap();
}
$(function(){
tab();//因为将tab绑定到$原型上,所以要使用$().tab()去调用
})
})

上面对应的html中调用:

seajs.use('./../../js/tab');

第三种方法:

//方法三:使用module.exports向外提供函数接口,html中代码为:
// seajs.use('./../js/calendar', function () {
// init();
// });
define(function(require, exports, module) {
$.fn.tab = function(option, callback) {
function bootstrap() {
console.log('djsakhdkj');
}
bootstrap();
}
$(function(){
init=function(){
$().tab();//因为将tab绑定到$原型上,所以要使用$().tab()去调用
}
module.exports=init;
})
})

对应的html文件:

seajs.use('./../js/calendar', function (initBox) {
initBox();
});

html文件中使用seajs引入calendar模块,并且根据calendar模块可以看出将函数名init作为接口:

module.exports=init;即,calendar向外提供函数借口init,html文件中的seajs.use接受该函数(此时两个名字可以不一样,init是js模块向外提供的借口函数;initBox是作为接收函数的参数名)
function(initBox){
  initBox();
}
执行该函数initBox();相当于执行模块中的函数init();然后init()函数再去调用$().tab()函数
最后如果在其他的js文件中药日用seajs,则:
require('./calendar.js');
initBox();

先使用require引入calendar.js 文件,然后调用 initBox函数

 

使用seajs封装js模块的更多相关文章

  1. seajs封装js方法

    必须要先引入sea.js文件 <script src="js/sea.js"></script> 其次,引入其他js文件 <script> se ...

  2. Node.js模块封装及使用

    Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一.Node.js模块封装 1.创建一个名为censorify的文件夹 2.在c ...

  3. Angular JS - 9 - SeaJS加载js模块

    seajs加载模块的三种方式 1.seajs.use() 加载入口模块,类似于Java的main函数 2.require:      当在一个模块中需要用到其它模块时一般用require加载 1)   ...

  4. 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)

    一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范.  1.AMD(Asy ...

  5. 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)

    文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...

  6. 彻底搞清楚javascript中的require、import和export(js模块加载规范的前世今生)

    为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持”类”(class),所以也 ...

  7. JS模块规范:AMD,CMD,CommonJS

    浅析JS模块规范 随着JS模块化编程的发展,处理模块之间的依赖关系成为了维护的关键. AMD,CMD,CommonJS是目前最常用的三种模块化书写规范. CommonJS CommonJS规范是诞生比 ...

  8. 第三课:sea.js模块加载原理

    模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: function l ...

  9. JS模块规范 前端模块管理器

    一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...

随机推荐

  1. 尽可能保留原有数据,建立UEFI与BIOS双启PE优盘

    尽可能保留原有数据,建立UEFI与BIOS双启PE优盘1.确保优盘或者移动硬盘有一个FAT32分区,如果没有FAT32分区,就用傲梅分区助手或者ppm转换一个现有的分区到FAT32分区0x0C,或者新 ...

  2. How can I read binary files from Resources

    How can I read binary files from Resourceshttp://answers.unity3d.com/questions/8187/how-can-i-read-b ...

  3. HTML与XHTML

    HTML:超文本标记语言,基本的网页设计语言 XHTML:基于XML的严格版的HTML XHTML相对于HTML的区别: 标签正确嵌套.标签必须有结束标记.区分大小写.属性值要用双引号.id代替nam ...

  4. ssm(spring,springmvc,mybatis)

    1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&qu ...

  5. <转>浏览器内核分类

    浏览器的种类成千上百,但所基于的内核,却没有几个.目前主流的浏览器内核主要为以下四种: 一.Trident内核,代表产品Internet Explorer说起Trident,很多人都会感到陌生,但提起 ...

  6. iOS开发拓展篇—UIDynamic(简单介绍)

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

  7. enmo_day_01

    OCP : 三门,sql, 管理一,管理二 VUE 考试中心 OCM : 2天,5年经验 11g grid 12c cloud 个人技术博客 itpub, csdn, 51blog 自己买主机,域名, ...

  8. MFC学习笔记(一)向模态对话框传递数据

    声明构造函数为2个参数,具有默认参数的参数须放在后面. CDialogDimmer::CDialogDimmer(CString name,CWnd* pParent /*=NULL*/) : CDi ...

  9. Java的内部类

    Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...

  10. 设置类型Double小数点位数

    Double amount = 100;DecimalFormat dcmFmt = new DecimalFormat("0.0000"); String amountStr = ...