直到有那么一天,我开始在js中拼凑DOM标签,而且需要不停的拼凑,我发现我的代码变得愈发的丑陋,不仅上是代码简洁的问题,甚至有时候还引发了性能问题。长此以往,不出三个月,上帝都将会不知道我写过些什么,本篇的目的完全出于记录使用心得。
首先,还是来看一下促使我改变书写JavaScript习惯的垃圾代码,在练习、测试、调试、甚至正式项目中,大量的充斥着下面的代码。
复制代码 代码如下:
Function finduser(userId)
{
}
Function showmessage(msg)
{
Var message=”提示,出错了,错误原因”+msg;
Alert(message);
}
Function append(obj)
{
Var onclick=”createdom()”;
Var title=”你好”;
$(obj).append(“<a href='javascript:void(0)' onclick='”+onclick+”' title='”+title+”'>”+title+”</a>”);
}
不要告诉我你没有见过上面的代码,说实话,上面的代码确实写得快,调用简单,如果前两个函数还不足以引发你的愤慨,那么第三个函数应该让你有点想问候写这代码创建者的冲动了。是的,第三个函数直接触发了我决定使用面向对象。
实际上,我完全可以把第三个函数改造成下面这样。
复制代码 代码如下:
function append(obj)
{
var a=document.craeteElement(“a”);
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
这样如何?有进步吧,好,这就是我想要的代码,但是还不够简洁。我希望可以把创建DOM对象封装到一个类中,并且把以上的三个方法都装到一个对象中;那好吧,动手起来是很简单的事情,这种工作不需要上网搜索代码和示例的,直接应用C#的面向对象思维就可以完成。
首先是封装以上的三个方法到一个对象中,封装很简单,应该不用我多废话的,直接上代码。
封装后的三个函数
复制代码 代码如下:
User={
Function finduser(userId)
{
},
Function showmessage(msg)
{
Var message=”提示,出错了,错误原因”+msg;
Alert(message);
},
Function append(obj)
{
Var a=document.craeteElement(“a”);
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
}
只需要声明一个User变量来存储上面的三个方法即可,不同的方法间使用逗号分隔,需要注意的是,这时候的User是一个静态的类,无构造函数或者构造函数私有(我猜的),反正不可new了。
其次,我再创建一个封装创建DOM对象的静态类,代码如下:
复制代码 代码如下:
createElement={
element=function(targetName){return document.createElement(targetName);},
a=document. createElement(“a”)
}
相当简单,这样我就可以测试一下上面的CreateElement对象是否可正常工作,这次测试是在append方法中进行测试。append方法再次被改造成下面的代码。
复制代码 代码如下:
function append(obj)
{
Var a= createElement .a;
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
目前看来,append工作得相当的良好,好吧,我需要作出一点小改动,我需要在append函数中创建三个a并把它依次添加到obj对象中,代码如下:
代码
复制代码 代码如下:
function append(obj)
{
For(i=0;i<3;i++)
{
Var a= createElement .a;
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
}
最后显示的结果是obj对象中只得到了一个a我十分的不理解,这一个a让我觉得我又回到了C#的怀抱,多么美好呀,经过分析,当我通过Var a= CreateElement .a;
第一次调用在CreateElement.a来获取a对象时,a属性中的document.createElement(“a”)就已经把a对象驻留到内存中,这之后不管我再怎么调用CreateElement.a,实际上都只是得到了内存中a的一个引用,改变的都竟然是同一个对象,这就是静态类的特别之处,但是,当我通过调用CreateElement.element函数来获取对象时,每次我得到的都是一个新的对象,方法不会保存对象的引用,这是肯定的,解决方法就是通过调用CreateElement.element函数来创建新的对象,但是这种方法非面向对象推荐。
另外一种比较好的解决办法是使用非静态类,即实体类的方式,创建非静态类的方式也是相当的简单,代码如下:
复制代码 代码如下:
createElement=function(){
element=function(targetName){return document.createElement(targetName);};
a=document. createElement(“a”);
}
直接声明createElement对象,并使之有构造函数,成员间以分号进行分隔,当然如果你喜欢,还可以直接这样写,也是没有一样的效果。
复制代码 代码如下:
function createElement (){
element=function(targetName){return document.createElement(targetName);};
a=document. createElement(“a”);
}
经过上面的声明,我们就可以在append函数中像C#一样使用createElement类来创建DOM对象了。
函数
复制代码 代码如下:
function append(obj)
{
for(i=0;i<3;i++)
{
var ele=new createElement();
var a=ele.a;
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
}
这样每次new createElement()都是一个新的对象,不存在引用的问题了。
实际上,上面提到的就是Javascript中静态类和非静态类的区别;当然也从中得知,使用静态类非静态类的效率上还是有些差别的,而且调用的时候肯定也是静态类方便一些,如果不计较引用冲突问题,我觉得静态类应该是首选的。
相关推荐:
seo矩阵运营中心是什么,seo矩阵运营中心是什么意思啊 ,北京ai特效
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
在线AI文章生成:智能写作的无限可能
ChatGPT:打破语言障碍,理解与沟通的新时代,交通轨道ai
ChatGPT网页版内容显示不全的解决方案:如何轻松解决问题?,课件ai
SEO资讯:最新趋势,提升网站排名,快速突破流量瓶颈,廊坊seo推广咨询服务
SEO对策:提升网站排名与流量的必备策略,SEO入门相机平价学生
SEO优化:如何让网站更具有吸引力,散文ai写作咒语是什么
seo网站通过什么软件,网站seo软件哪个 ,战团ai
产品经理seo是什么,产品经理seo是什么意思 ,ai政府公文写作 软件
ChatGPT显示“此网站无法加载站点”:背后原因与解决办法详解,用ai画明度渐变条
seo规范是什么,seo行业标准 ,啊龙ai音乐
优化整站,让网站飞速增长,打造行业竞争力,广东网站建设与维护
SEO难吗?揭秘SEO背后的真相,让你轻松上手!,大旺百度网站推广
ChatGPT不能用?揭秘你可能忽视的真相和解决方法,强国ai2022
如何识别文章是否由AI撰写?揭开智能写作的秘密
专业关键词助力SEO优化,让你的内容脱颖而出,东营响应式网站优化
ChatGPT无法加载?检查您的网络设置并尝试重启,轻松解决常见问题!,ai招生广告设计
seo要公司什么资源,做seo需要用到什么软件 ,ai明星换了
SEO差价如何用SEO优化帮助企业实现成本与效益的完美平衡,盐城seo收费贵吗
为什么做seo的人很少,为了什么做seo ,ai不负你
自动写文章AI:高效创作工具,开启写作新纪元
seo运营经理是什么,seo和运营的区别 ,皖妍ai宁慕晴o
SEO确实是企业增长的关键,这些技巧让你走在行业前沿,山东网站建设信息
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
优化页面-提升用户体验与搜索引擎排名的关键,绍兴视频营销推广
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
seo配置是什么,seo设置是什么 ,ai图标制作教程
求一个AI软件,彻底改变你的工作与生活!
AI智能工具的无限可能:未来已来,你准备好了吗?
SEO分类中内部优化的有:让你的网站脱颖而出!,by ai
“扩写AI”-引领写作革命,开启智能创作新时代,dede seo 标题如何填写
SEO排序:如何让你的网页在搜索引擎中脱颖而出,平谷抖音seo推广招聘
SEO新闻:2025年最新趋势与最佳实践,你不可错过的SEO战略,郑州网络营销推广的优势
怎么用AI写出令人惊叹的文章?轻松搞定写作难题!
wordpress seo是什么,wordpress建站seo好做吗 ,学习图文ai
创作新时代:自动生成文章AI的魅力与未来
seo链接锚是什么,什么是锚链接,如何设置锚链接 ,保山智能AI
SEO自从上线后的演变与未来发展趋势,拼多多增加关键词排名
WPQQ-开启数字时代的智能连接新纪元,杭州网站推广厂家电话
AI一键生成文章免费版:颠覆写作新体验
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
文章AI扩写:突破创作瓶颈,提升写作效率的秘密武器
ChatGPT打开后空白:如何解决这个困扰并高效使用AI助手,ai四声怎么写
SEO地位:如何提升你的网站排名与曝光度,抢占市场先机,微营销网络推广
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
什么是蜘蛛弛?揭秘这个SEO优化背后的神秘工具,南沙seo优化排名价格
AI撰写工具的无限可能,让内容创作更高效、更精彩!
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么