前端JavaScript框架开发简略思想

  很久没有更新博客了,之前由于一些事情要忙,没有把自己平时接触到的、学到的知识分享出来,今天先来扯一下JavaScript框架是怎么回事以及如何构建自己的JavaScript框架?

  先来简单说说JavaScript到底是什么?JavaScript是一种基于(面向)对象和事件驱动并具有相对安全性的客户端的脚本语言,同时也是一种广泛用于客户端Web开发中的脚本语言。它最初由网景公司(Netscape)的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript具有面向对象、作用域、闭包、上下文等相关特性。JavaScript语言优秀的想法表现在函数、弱类型、动态对象和富有表现力的对象字面量表示法几个方面,而其比较糟糕的想法是基于全局变量的编程模型。正因为JavaScript具有这些特点,其在客户端的使用日益频繁,作用非常巨大,JavaScript的Ajax技术甚至颠覆了整个互联网的开发模式。

  JavaScript 本身就是一种功能强大的语言,开发者可以不需要额外的框架就可创建富互联网应用程序(RIA)。然而使用 JavaScript 并不是件容易的事,主要是由于支持多个 Web 浏览器产生的复杂性。与 HTML 和 CSS一样,不同的浏览器有不同的 JavaScript 实现。让 JavaScript 代码实现跨浏览器兼容简直是个噩梦。于是出现了一种能够简化工作的方式,开发JavaScript框架或库,JavaScript框架或库是一组能够轻松生成跨浏览器兼容的JavaScript代码的工具盒函数,经过测试好的框架或库可以后期重复使用而不必担心出现各种问题,大大地简化了开发工作。

  现在网络上已经流行了许多类别的JavaScript框架或库,比较著名的JavaScript框架如Yahoo! UI Library (YUI) (一个开放源代码的 JavaScript 函数库,为了能建立一个高互动的网页,它采用了AJAX, DHTML 和 DOM 等程式码技术。它也包含了许多 CSS 资源,使用授权为 BSD许可证)、JQuery(诞生于2006年,一直以来以开源供形式供开发者使用,其核心思想是“Write Less,Do More”)、Dojo(一个强大的面向对象JavaScript框架,主要由三大模块组成:Core、Dijit、DojoX。Core提供 Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API)、Sencha Ext JS4(Sencha 是由 ExtJS、jQTouch 以及 Raphael 三个项目合并而成的一个新项目,是绘画、图表引擎,使用DOM-accessible JavaScript图表和矢量图)、Prototype(一个由Sam Stephenson写的JavaScript包,这个构思奇妙编写良好的一段兼容标准的一段代码将承担创造胖客户端, 高交互性WEB应用程序的重担,轻松加入Web 2.0特性)、MooTools(一个简洁,模块化,面向对象的JavaScript框架,它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代 码,Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似,但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等)、Zepto(支持移动WebKit浏览器的JavaScript框架,具有与jQuery兼容的语法,2-5k的库,通过不错的API处理绝大多数的基本工作)……

  这些JavaScript框架或库他们具有各自的特点,但是他们都有一个共同的问题,开发者事先并不知道自己需要哪些JavaScript功能,而这些框架具有许多功能性函数,从而造成了一定的影响,如将没有用到的函数加载到页面里,增大了网络带宽的开销。作为一个开发者,如果只会使用人家已经做好的东西来制造东西,我觉得永远不会有多大的进步。虽然利用人家的框架或库能够解决实际问题,但是如果有时候开发中遇到了框架里的问题自己可能不知道如何去解决,也不知道怎么样去重新构造一个适合于自己站点的应用框架。

  那么如何让自己能够轻易开发出一个适合自己应用的框架呢?我觉得有两点比较重要,首先熟悉JavaScript语言的基本语法以及相关特性,再者熟悉各个浏览器之间的差异性。为了能够比较顺利的进行框架开发,必须熟悉JavaScript的函数、闭包、命名空间、作用域、面向对象、函数式语言、动态性等知识点。大多数JavaScript框架都具有以下的有用特性,包括选择器、DOM遍历、DOM操作、使用函数、事件处理、Ajax。许多框架都包含了这些特性,但是有些过于复杂,平时在开发中很少使用,于是我决定用自己所学过的知识来搭建一个属于自己的框架,这个框架需要具备平时自己开发中经常用的方法。现在初步我想实现以下方法,选择器、CSS、事件处理、运动效果、Ajax。