当前位置:首页 > 日记 > 正文

Javascript插件开发教程(六)

Javascript插件开发教程(六)
首先,开放分析

我们今天该怎么说这篇文章呵呵,我们就在文章的最后调整不足逐步分析了它在一个浅的方式,让你有一个逐步完善的过程。少说话,进入点。让我们回到以前。

js代码的一部分,如下所示:

复制代码代码如下所示:

功能itemselector(元素、选择){

this.elem =元;

this.opts =选择;

};

无功isproto = itemselector.prototype;

isproto.getelem =函数(){

返回this.elem;

};

isproto.getopts =函数(){

返回this.opts;

};

*数据操纵 / *

ISProto。_setcurrent =功能(电流){

This.getOpts(){ } =电流电流;

};

isproto.getcurrentvalue =功能(电流){

返回this.getopts(){电流};

};

*数据操纵 / *

isproto.init =函数(){

var =;

this.getopts(当前){ } = null; / /数据指针

这个_setitemvalue(this.getopts()(currenttext ));

无功itemselem = that.getelem(),发现(。内容。项目);

This.getElem(),发现(。标题DIV ),(单击

ItemsElem.toggle();

});

This.getElem(),发现(。标题跨度),(单击

ItemsElem.toggle();

});

美元。每个(this.getopts()(项目},功能(我的项目){ }

项目{id=(新的日期()GetTime()ToString());

这_render(项目);

});

};

ISProto。_setitemvalue =函数(值){

This.getElem(),发现(。标题div)文本(价值)。

};

ISProto。_render =功能(项目){

var =;

无功itemelem = $()

文本(项目{文本)

attr(身份证。

如果(0=项目=禁用)

itemelem.on(单击

无功的变化= that.getopts(){改变};

that.getelem(),发现(。内容。项目)藏();

,_setitemvalue(项目{文本));

这_setcurrent(项目);

OnChange onChange(项);

})

.mouseover(函数(){()

$(这)。AddClass(项目悬停);

})

。mouseout(函数(){()

$(这)。RemoveClass(项目悬停);

});

}

别的{

itemelem.css(颜色

that.getelem(),发现(。内容。项目)藏();

,_setitemvalue(项目{文本));

});

}

ItemElem.appendTo(this.getelem(),发现(。内容。项目));

};
效果如下图所示:
(a)-非可操作状态
B)----可操作状态
(二)开放思路、结构调整

从代码中可以看出,它通过Js的语法特点,以面向对象的方式有效地组织起来。它比松散的形式化组织方式要好得多,但仍有许多不足之处。

(1)代码中重复的代码太多了。

(2)责任划分不明确。

(3)过程不完善。

我们基于上述要点进行了有效的重构,首先要对这个组件的需求进行排序,其功能点如下:

(1)初始化配置组件。

复制代码代码如下所示:

$(函数(){())

无功itemselector =新itemselector($(#项选择器),{

currenttext:请选择项目

项目:{

{

文本:

值:js

禁用:1

},

{

文本:CSS

值:CSS

禁用:0

},

{

文本:

值:html

禁用:0

}

},

});

ItemSelector.init();

});
此代码非常清晰,无需进行任何修改,但可以根据上述配置扩展功能,例如,添加配置项模式支持多个选项。

下面是完成初始化逻辑,如下所示:

复制代码代码如下所示:

isproto.init =函数(){

var =;

this.getopts(当前){ } = null; / /数据指针

这个_setitemvalue(this.getopts()(currenttext ));

无功itemselem = that.getelem(),发现(。内容。项目);

This.getElem(),发现(。标题DIV ),(单击

ItemsElem.toggle();

});

This.getElem(),发现(。标题跨度),(单击

ItemsElem.toggle();

});

美元。每个(this.getopts()(项目},功能(我的项目){ }

项目{id=(新的日期()GetTime()ToString());

这_render(项目);

});

};
这段代码有很多问题,责任不明确。初始化逻辑包含函数点的详细信息。

然后继续查看代码的呈现部分:

复制代码代码如下所示:

ISProto。_render =功能(项目){

var =;

无功itemelem = $()

文本(项目{文本)

attr(身份证。

如果(0=项目=禁用)

itemelem.on(单击

无功的变化= that.getopts(){改变};

that.getelem(),发现(。内容。项目)藏();

,_setitemvalue(项目{文本));

这_setcurrent(项目);

OnChange onChange(项);

})

.mouseover(函数(){()

$(这)。AddClass(项目悬停);

})

。mouseout(函数(){()

$(这)。RemoveClass(项目悬停);

});

}

别的{

itemelem.css(颜色

that.getelem(),发现(。内容。项目)藏();

,_setitemvalue(项目{文本));

});

}

ItemElem.appendTo(this.getelem(),发现(。内容。项目));

};
问题是显而易见的,已经找到了可重复的操作,应该进行合理的抽象,并实现重用的目的。

整个构建过程包括初始化、渲染(事件绑定)、相关的数据操作方法以及DOM操作的辅助方法。

总之,在简单梳理后,要确立运行目标函数和主要任务分配过程、职责。

所以我们重构的目的是明确的,对吗!它是抽象的功能点,友好分工的责任,我们如何做到这一点

第一步是建立过程函数方法:(方法接口)

复制代码代码如下所示:

isproto.init =函数(){

你在这里编码!

};

ISProto。_render =函数(){

你在这里编码!

};
第二部分,界面抽象方法的建立:

复制代码代码如下所示:

ISProto。_fnitemselectordelegatehandler =函数(){

你在这里编码!

};

ISProto。_fntriggerhandler =函数(){

你在这里编码!

};

ISProto。_addorremoveclass =函数(){

你在这里编码!

};
第三步是建立数据操作接口:

复制代码代码如下所示:

ISProto。_setcurrent =函数(){

你在这里编码!

};

ISProto。_getcurrent =函数(){

你在这里编码!

};
也有一些参考以下完整的源代码,这里只是说的想法。

(三)完整的学习代码,代码已经过测试。

复制代码代码如下所示:

功能itemselector(元素、选择){

this.elem =元;

this.opts =选择;

this.current = 1; / /数据指针

};

无功isproto = itemselector.prototype;

*吸气剂API

isproto.getelem =函数(){

返回this.elem;

};

isproto.getopts =函数(){

返回this.opts;

};

ISProto。_getcurrent =函数(){

返回this.current;

};

*吸气剂API

*数据操纵 / *

ISProto。_setcurrent =功能(电流){

this.current =电流;

};

ISProto。_setitemtext =功能(文本){

This.getElem(),发现(。标题div)的文本(text);

};

*数据操纵 / *
更新2015 1 / 31 / * * / 23:38

ISProto。_fntriggerhandler =函数(指数、文本值){

如果(这。_isdisabled(值)){

索引= 1;

文本= this.getopts(){currenttext};

}

这_setitemtext(文本);

这_setcurrent(指数);

This.getElem(),发现(。内容。项目)藏();

};

ISProto。_addorremoveclass =功能(元素、类名、Addis){

如果(Addis){

Elem.addClass(类名);

}

别的{

Elem.removeClass(类名);

}

};

ISProto。_fnitemselectordelegatehandler =函数(){

var =;

This.getElem()(),(单击

that.getelem(),发现(。内容。项目)的Toggle();

});

};

ISProto。_isdisabled =函数(值){

返回(1 = value):false;

};

Update on 2015 1/31 23:38 / * * /

isproto.init =函数(){

var =;

这_fnitemselectordelegatehandler();

美元。每个(this.getopts()(项目},功能(我的项目){ }

项目{索引= i;

这_render(项目);

});

这个_fntriggerhandler(这个。_getcurrent(),this.getopts()(currenttext},1 );

};

ISProto。_render =功能(项目){

var =;

无功itemelem = $()。文本(项目{文本})。Attr(身份

var =活动类一样(0 =项目{禁用)项目将:项禁用悬停;

itemelem.on(单击

,_fntriggerhandler(项目{指数},{项目文本},{禁用项目));

})

.mouseover(函数(){()

,_addorremoveclass($(this)、活动类一样,真的);

})

。mouseout(函数(){()

,_addorremoveclass($(this)、活动类一样,假);

});

ItemElem.appendTo(this.getelem(),发现(。内容。项目));

};

U3000 U3000

(四)最后摘要

(1)面向对象的思维方式是对功能需求的合理分析。

(2)以类的方式组织我们的插件逻辑。

(3)不断重构上述例子,如何进行合理的重构不要过分设计,要能轻松,推荐的方法是流程设计和面向对象设计的结合。

(4),下一篇文章将拓展相关功能,如模式属性,复选框支持多选模式是1

为了看看我是否比上一个代码好得多,我的合作伙伴应该更多地考虑他们自己的项目,并努力使他们的代码更加合理。

相关文章

ai绘制美丽经典游戏图标

ai绘制美丽经典游戏图标

图标,绘制,经典游戏,美丽,电脑软件,本教程介绍了一个朋友来ai绘制美丽的经典游戏图标的方法。从教程中得出的游戏图标非常漂亮,难度也不是很大。介绍也很详细。建议像你这样的朋友一起学习这个教程。 本教程中的朋友将学习如何使用AI绘制经…

Javascript正则表达式的群匹配

Javascript正则表达式的群匹配

正则表达式,电脑软件,Javascript,语法 元字符:(模式)函数:用于重复匹配的数据包 ~物业1美元9美元,如果它存在,是用于获取子字符串匹配相应的组 1或$ 1用于匹配第一组的内容。 2或$ 2用于匹配第一组的内容。 … 9或$ 9用于匹配第一组的内容…

PS图象处理软件将计算出树的美丽温

PS图象处理软件将计算出树的美丽温

调制,图象,计算出,处理软件,温暖,该图片是针对材质拍摄的,非常适合光线效果。处理时间直接以主色调为暖色调,深蓝色可以增加为色,然后在背景部分渲染效果即可出太阳。 该图片是针对材质拍摄的,非常适合光线效果。处理时间直接以主色调为暖色调…

PS图象处理软件合成蹲在窗户边有一

PS图象处理软件合成蹲在窗户边有一

夜景,图象,一个美丽,蜡烛,处理软件,本教程介绍给朋友,谁使用PS图象处理软件合成蹲在窗户边,拿着一支蜡烛。美丽的夜景很美。建议你过来欣赏一下你的朋友。 本教程介绍如何使用PS图象处理软件合成的朋友蹲在窗户边,手持蜡烛的美丽夜景。课程的…

ai与PS结合快速构建当前超简单海报

ai与PS结合快速构建当前超简单海报

海报,快速,简单,电脑软件,ai,本教程是向AI介绍一位朋友,并与PS结合,快速创建超级简化海报方法。本教程制作的海报非常漂亮,方法非常简单。下面的萧边会给你一个详细的介绍。让我们一起学习。 本教程向大家介绍AI结合ps快速构建目前的超级简单…

时尚空间中立体线条的人工生成

时尚空间中立体线条的人工生成

空间,线条,时尚,电脑软件,本教程是给你介绍一个朋友,ai,在时尚的气氛下制作英文线的三维线条方法。教程制作的线条非常漂亮,难度也不是很大。值得学习和推荐。让我们一起学习。 本教程教人工智能学习者使用人工智能制作实线英语单词。教程制…

jQuery对函数和替换函数的讨论

jQuery对函数和替换函数的讨论

函数,替换,电脑软件,jQuery,早些时候,为了更好的浏览器兼容性,一直使用jquery-1.7.2版本;但随着主流浏览器和技术的快速发展,甚至引导新版本介绍上述jquery-1.9版,代表普通jquery-1.7.2告别历史舞台; 但我们的一些常见的功能被弱化;它不会注意各…

Word2010文档中如何调整文字方向Wo

Word2010文档中如何调整文字方向Wo

文字,文档,调整,教程,电脑软件,Word2010如何调整在Word2010文档文本排版文字的方向,尤其是报告的部分的版面文字需要调整方向,如纵向,所以Word2010中如何对文本文件中的方向调整,事实上,操作非常简单。 1、打开需要调整文本方向的文档,点击菜单栏…

在jQuery中使用$以获取各种返回类

在jQuery中使用$以获取各种返回类

数据,类型,电脑软件,jQuery,var arr = { 美元。每个(ARR,函数(){(){ 警戒(此); }); 上面每个输出的结果是:一,二,三,四。 var arr = {AAA 美元。每个(ARR,功能(我的){ 警报(i);i是循环数 警报(a); }); VaR arr1 = { { 1, 4, 3 },{ 4, 6, 6 },{ 7, 20, 9 } } 美元。每个(a…

Word如何从第二页插入页码

Word如何从第二页插入页码

页码,电脑软件,Word,在打印word文档时,有时页面不需要设置页码。那么我们如何从第二页设置页码,及具体的实施步骤如下:(本教程以Word2003为例,插入页码从第二页的方法)。 1,点菜单插入-页码,弹出窗口显示如下,并显示页码在首页。(如图1) 图片1 2,点格…

PS图象处理软件的美人鱼海报在深海

PS图象处理软件的美人鱼海报在深海

深海,图象,处理软件,海报,电脑软件,本教程介绍的朋友在深海底的美人鱼海报PS图象处理软件合成的影响。这门课合成的美人鱼很漂亮,难度也不是很大。建议像你这样的朋友一起学习这个教程。 本教程主要是介绍在深海里的美人鱼海报合成PS图象处…

jQuery插件实现动画mixitup过滤和

jQuery插件实现动画mixitup过滤和

过滤,动画,插件,排序,电脑软件,MixItUp是什么 mixitup是一个jQuery插件,提供了动画的过滤和排序。 MixItUp是伟大的,像任何类别或内容管理投资组合排序,画廊的博客。它还可以作为应用程序的用户界面和数据可视化的强大工具。 mixitup扮演好…