当前位置:  开发笔记 > 编程语言 > 正文

JavaScript存在哪些反模式?

如何解决《JavaScript存在哪些反模式?》经验,为你挑选了7个好方法。

我发现不做的事情比学习应该做的更难学习.

根据我的经验,专家和中间人之间的区别在于能够从各种看似相同的方式中做出相同的选择.

那么,谈到JavaScript,你应该做什么样的事情以及为什么

我能够为Java找到很多这些,但由于JavaScript的典型上下文(在浏览器中)与Java非常不同,我很想知道它会发生什么.



1> annakata..:

语言:

命名空间通过在全局上下文中创建大量变量来进行污染.

绑定事件处理程序的形式为'foo.onclick = myFunc'(不可扩展,应该使用attachEvent/addEventListener).

几乎在任何非JSON上下文中使用eval

几乎每次使用document.write(使用像document.createElement这样的DOM方法)

针对Object对象的原型设计(BOOM!)

这是一个小的,但用'+'做大量的字符串连接(创建一个数组并加入它更有效)

参考不存在的undefined常数

设计/部署:

(通常)不提供noscript支持.

不将您的代码打包到单个资源中

将内联(即主体)脚本放在主体顶部附近(它们阻止加载)

特定于Ajax:

不指示对用户的请求的开始,结束或错误

轮询

传递和解析XML而不是JSON或HTML(如果适用)

编辑:我一直在想更多!


Kibee,我认为这只是一种纯粹的迂腐.这就是每个人都用术语AJAX的意思,所以我认为这是无关紧要的.忘记AJAX作为首字母缩略词,并将其视为我们所有人的意思.
是的我知道X代表什么:)很多时候A也是假的.对于我们很多人很久以前所做的事情来说,这只是一个不幸的总称.仅供参考,JSON和XML之间的差异很大,但批判性的JSON更轻,并且采用原生格式,JS不需要解析.

2> Triptych..:

除了那些已经提到的......

使用for..in构造迭代数组
(迭代数组方法和索引)

使用Javascript内联
(不灵活并防止多个事件侦听器)

使用'Function()'构造函数
(由于同样的原因eval()很糟糕)

将字符串而不是函数传递给setTimeoutsetInterval
(也在eval()内部使用)

不使用分号依赖隐式语句
(不良习惯可以拾取,并可能导致意外行为)

使用/*..*/来阻挡的代码行
(可以使用正则表达式文字干扰,例如:/* /.*/ */)

<福音传道>当然,不使用原型;)


@克里斯.那太荒谬了.我加了一个眼色!

3> Rakesh Pai..:

对我来说最大的不是理解JavaScript编程语言本身.

过度使用对象层次结构并构建非常深的继承链.在大多数情况下,浅层次结构在JS中工作正常.

不了解基于原型的面向对象,而是构建大量的脚手架,使JS表现得像传统的OO语言.

当程序/函数式编程可以更简洁和有效时,不必要地使用OO范例.

然后是浏览器运行时的那些:

不使用事件委托或观察者模式(pub/sub)等良好建立的事件模式来优化事件处理.

当DOM节点可以在内存中并一次性附加时,进行频繁的DOM更新(如循环中的.appendChild).(巨大的性能优势).

当可以使用本机方法时,过度使用库来选择具有复杂选择器的节点(getElementById,getElementByTagName等).现在这个问题变得越来越少,但值得一提.

当您希望第三方脚本与您的页面位于同一页面时扩展DOM对象(最终会破坏彼此的代码).

最后是部署问题.

不缩小文件.

Web服务器配置 - 不是压缩文件,不是明智地缓存它们.

我有一些客户端优化技巧,涵盖了我上面提到的一些事情,以及更多,在我的博客上.



4> Jason S..:

浏览器检测(而不是测试您要使用的特定方法/字段是否存在)

在大多数情况下使用alert()

另请参阅Crockford的"Javascript:The Good Parts",以避免各种其他事情.(编辑:警告,他在他的一些建议中有点严格,比如使用"==="而不是"=="所以带上任何粒子的盐为你工作)



5> Vilx-..:

一些事情就在我的头顶.当我想到更多时,我会编辑这个列表.

不要污染全局命名空间.而是组织对象中的东西;

不要省略变量的'var'.这会污染全局命名空间,并可能使您遇到其他此类脚本的麻烦.



6> Greg Dean..:

任何使用'与'

with(document.forms ["mainForm"].elements){
input1.value ="junk";
input2.value ="垃圾"; }



7> scunliffe..:

任何提及

document.all

在你的代码中,除非它在特殊代码中,只是为了IE来克服IE错误.(咳嗽 document.getElementById()咳嗽)

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有