我们看较复杂的js程序最怕结构混乱,一个好的js书写结构,在很大程度上可以减缓阅读的障碍性。

我感觉一个良好的结构要有两点:一是要有一个统一的入口,这样就保证了程序的可阅读性;二是要能够灵活的设置参数,这样就保证了程序的可扩展性。

下面是我在平时写代码时常用到的两种结构,先看第一种结构,示例代码如下:

            var scrollElement = {
timer : null,
init : function( options ){
var nowOptions = this.setOptions( options )
this.runSetInterval( nowOptions )
this.hoverElement( nowOptions )
},
setOptions: function(options) {
var defaultOptions = {
"speed" : 1000,//动画效果的步速
"time" : 3000, //定时器时间间隔
"num" : 1,//每次滚动几个元素
"scrollContainer" : null,//要滚动元素的父级元素
"height" : ""//单个滚动元素的高度
}
return $.extend( defaultOptions, options || {} )
},
runSetInterval : function( options ){
this.timer = setInterval(function(){
var scrollContainer = options.scrollContainer
scrollContainer.animate({ "marginTop" : -options.height*options.num }, options.speed, function(){
for( var i =0; i < options.num; i++ ){
scrollContainer.find("li").first().appendTo( scrollContainer )
}
scrollContainer.css( { "marginTop" : 0 } )
})
}, options.time)
},
hoverElement : function( options ){
var me = this
options.scrollContainer.on("mouseenter", "li", function(){
clearInterval( me.timer )
$(this).addClass("cur")
}).on("mouseleave", "li", function(){
me.runSetInterval.call( me, options )
$(this).removeClass("cur")
})
}
}

这是一段实现元素滚动效果的js。init作为统一的程序入口,init函数里面首先进行的是参数的初始化,初始化完成后进行各个功能函数的调用,一目了然。我们在看下初始化参数的函数setOptions,函数里面有一个默认的参数配置,这个函数其实要做的就是把用户设置的参数对象和默认的参数对象整合,生成一个满足用户需求的参数对象,这样就满足了程序的灵活性和可扩展性。

调用时的结构如下:

scrollElement.init({"scrollContainer" : ulNode, "height" : liNodeH, "speed" : 2000 })

另一种代码结构与上种结构本质上差不多,要有统一的入口和保证参数的灵活性,只是实现时用到了prototype。示例代码如下:

    var Class = {
create: function() {
return function() { this.initialize.apply(this, arguments) }
}
}
var ClassSelectPage = Class.create()
ClassSelectPage.prototype = {
initialize : function(options){
var me = this
me.setOptions(options)
me.CS = me.initClassSelect() //初始化类目选择组件
me.handleClickTabs() //处理点击tab标签的逻辑
me.handleClickSearchBtn() //处理点击搜索按钮的逻辑
me.handleSearchText() //处理搜索输入框的交互
me.gobackCsBox( $(".J_gobackCsBox") ) //为"您最常使用的分类"中的"请重新选择分类"绑定事件
me.whenCatePathClick( $(".J_commonContent") )//"您最常使用的分类" 其它未选中的分类路径在点击时,也需要进行是否签署协议的处理
me.handleGobtnSubmit() //处理点击下一步,填写产品信息按钮
},
setOptions : function( options ){
this.options = {//初始化设置
tabItems : $(".ind-tab").find(".ind-tab-item"), //tab元素
csItems : $(".cs-contents").find(".cs-item"), //item元素
JsearchContent : $(".J_searchContent"), //盛放搜索出来的类目的容器
defaultSearchValue : "输入产品名称,系统自动为您推荐分类"//$(".J-searchText").val() //查找类目搜索框的默认值
} $.extend( this.options, options || {} )
},
initClassSelect : function(){...},
handleClickTabs : function(){...},
handleClickSearchBtn : function(){},
.........
}

调用的时候如下:

new ClassSelectPage({…})

较复杂js的书写格式的更多相关文章

  1. Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"

    Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...

  2. webstorm的live templates快速编辑功能,让你的css JS代码书写速度飞起来

    前言: Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码, 大大提高了HTML/CSS代码编写的速度,比如下面 ...

  3. JavaScript的书写格式及书写的注意点

    JavaScript书写格式: 1.行内样式: 写在标签内部 2.内嵌样式(内联样式) : 写在一对head标签中 3.外链样式: 写在一个单独的.js文件中, 再导入进来 JavaScript书写格 ...

  4. Java的书写格式,标识符及命名规则,注释

    Java的书写格式,标识符及命名规则,注释 1.Java语言的书写格式(约定成俗) 1) 大括号要对齐(左大括号与句尾对其,后面大括号与句头对齐),并且成对写 2) 左大括号前面有空格 3) 遇到左大 ...

  5. js 生成 yyyy-mm-dd 格式的逼格姿势

    关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...

  6. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式

    arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...

  7. JS判断上传图片格式是否正确

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. MARK DOWN 书写格式说明

    MarkdownPad2 书写格式说明: Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,而MarkdownPad2是其中一种支持M ...

  9. Python3 configparser值为多行时配置文件书写格式

    一.说明 一般而言ini配置文件键值对都是一行就完事了,但有时候我们想配置的值就是由多行组成,这里说明此时配置格式该如何书写. 二.书写格式 如果值为多行,那么在第一行外的后续所有行前加入至少一个空格 ...

随机推荐

  1. Python2安装说明

    1.Python版本 Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.12. Python 3.x的版本的,被称为Python3:是最新的版本的,比如 ...

  2. ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(四)

    这是第四步点击保存将信息存入数据库中. 这个就简单了利用ajax将JSON字符串传到后台然后这里有个知识点就是将DataTable直接存入数据库中.代码如下: 一.界面获取数据JS代码: //保存订单 ...

  3. Linux ls -l内容详解

    ls -l是列出当前目录下所有文件信息 以下是实例: 具体的文字描述如下: 第1字段:  文件属性字段文件属性字段总共有10个字母组成,第一个字母表示文件类型,如果这个字母是一个减号”-”,则说明该文 ...

  4. expr命令

    expr命令的兩大作用:1)四则运算:2)字符串的操作: 1.四则运算 [tough@localhost ~]$ + + [tough@localhost ~]$ + [tough@localhost ...

  5. oracle 各种问题排查

    一.ORA-00257 ORA-00257归档日志写满,最简单方法.可以更改归档的大小. 二.job不自动运行解决方法 http://www.cnblogs.com/xbding/p/5861443. ...

  6. NE、EQ等比较操作符的意义

    比较所有的 字段类型 要比较所有 的字段类型 ,可以在逻 辑表达式中 使用下列运 算符: <运算符>含 义 EQ 等于 = 等于 NE 不 等于 <> 不 等于 >< ...

  7. UIAlertController——之Block回调

    iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.

  8. SQL Server数据库学习笔记-E-R模型

    实体(Entities)联系(Relationships)模型简称E-R模型也称E-R方法,是由P.P.Chen于1976年首先提出的.还有一个关键元素Attributes-属性,它提供不受任何数据库 ...

  9. [笔记]学习HighCharts的使用(不错的web图表插件)

    最近有一个小项目需要用到折线图.到处请教了一下,有人给我推荐了highcharts.感觉还不错,就稍微学习下.这里记录一下学习的过程. 网上相关的内容还不少,我就说一下我学习的内容. 看的第一篇文章& ...

  10. html 元素 变小手

    要设置鼠标指针放在一个元素边界范围内时所用的光标形状,需要对元素的css属性cursor进行设置.cursor属性可能的值1.default 默认光标(通常是一个箭头)2.auto 默认.浏览器设置的 ...