好久没有更新博客了,以前因为一些事情要忙,没有把本身平时接触到的、学到的知识分享出来,今天先来扯一下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。框架