首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript有哪些反模式?

JavaScript有哪些反模式?
EN

Stack Overflow用户
提问于 2008-12-18 14:30:11
回答 10查看 11.2K关注 0票数 54

我发现不做的事比应该做的事更难学。

根据我的经验,区分专家和中级的是从做同样事情的各种看似相同的方法中进行选择的能力。

那么,当涉及到JavaScript 时,你不应该做什么事情,为什么是

我能够找到很多针对Java的脚本,但是由于JavaScript的典型上下文(在浏览器中)与Java的上下文非常不同,所以我很好奇会有什么结果。

EN

回答 10

Stack Overflow用户

发布于 2008-12-18 14:38:54

语言:

通过在全局context.

  • Binding事件处理程序中以‘JSON=

  • ’的形式创建大量变量来污染foo.onclick命名空间(不可扩展,应该在几乎任何非myFunc上下文中使用attachEvent/addEventListener).

  • Using eval,并且几乎每次使用document.write (使用像document.createElement)

  • Prototyping这样的DOM方法来处理对象对象(foo.onclick!)

  • 这是一个小问题,但是使用'+‘进行大量的字符串连接(创建一个数组并连接它对于不存在的undefined常量

来说要复杂得多

设计/部署:

  • (通常)不提供无脚本支持。
  • 不会将代码打包到靠近正文顶部(它们是块加载)的单个
  • 内联(即正文)脚本

特定于Ajax的:

不指示对user

  • polling

  • passing的请求的开始、结束或错误的XML,并且解析而不是JSON或
  • (其中appropriate)

其中许多都来自Addy Osmati的《学习JavaScript设计》一书:https://www.oreilly.com/library/view/learning-javascript-design/9781449334840/ch06.html

编辑:我一直在想更多!

票数 49
EN

Stack Overflow用户

发布于 2008-12-18 18:54:11

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

使用for..in构造迭代数组的

(迭代数组方法和索引)像<body onload="doThis();">一样使用Javascript内联的

(不灵活,并防止多个事件函数的‘listeners)

  • Using ()’构造函数

(坏的原因与eval()坏的原因相同)

  • 将字符串而不是函数传递给setTimeoutsetInterval

(也通过不使用分号对隐式语句使用eval() internally)

  • Relying

(养成坏习惯,可能会导致意外的behavior)

  • Using /*。)*/阻止代码行

(可能会干扰正则表达式文字,例如:/* /.*/ */__)

当然,不要使用Prototype ;)

票数 20
EN

Stack Overflow用户

发布于 2008-12-19 12:00:14

对我来说,最大的问题是不理解JavaScript编程语言本身。

  • 过度使用对象层次结构并构建非常深的继承链。在大多数情况下,浅层次结构在JS中工作得很好。
  • 不理解基于原型的面向对象,而是构建大量的脚手架,使JS的行为像传统的OO languages.
  • Unnecessarily一样,使用OO范例,而过程/函数编程可以更简洁、更有效。

然后是针对浏览器运行时的:

当DOM节点可以在内存中一次性附加时,

  • 没有使用良好的已建立的事件模式(如事件委托或观察者模式(发布/订阅))来优化事件handling.
  • Making频繁的DOM更新(如循环中的.appendChild )。(当可以使用本机方法(getElementById、getElementByTagName等)时,用于选择具有复杂选择器的节点的高性能benefit).
  • Overusing库)。如今,这已经不是什么大问题了,但是当您希望第三方脚本与您的脚本在同一个页面上时(最终会破坏彼此的代码),使用mentioning.
  • Extending DOM对象是值得的。

最后是部署问题。

不会压缩files.

  • Web-server配置的
  • -不会压缩文件,也不会合理地缓存文件。

我在我的博客上有一些client-side optimization tips,它涵盖了我上面提到的一些事情,甚至更多。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/377999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档