javascript框架之全局变量
纵观各大类库的实现,一开始基本都是定义一个全局变量,然后对它进行扩展。如Prototype.js的Prototype,mootools的Native,Base2的Base,Ext的Ext,JQuery的JQuery,YUI的YUI,dojo的dojo,MochiKit的MochiKit等等。从全局变量的污染程度来看,分为两大类,Prototype,mootools与Base2归一类。Prototype的哲学是对JS原生对象进行扩展。早些年,Ptototype差点成为事实的标准,因此基本没有考虑到与其他库的共存问题。基于Prototype,也发展出诸如script.aculo.us,rico,Plotr,ProtoChart,Scripty2等非常优秀的类库以及一大堆收费插件,非JQuery那一大堆垃圾插件所能比拟的。不过,有点渊源的插件几乎与Prototype有关,如著名的lightbox。mootools是Prototype的升级版,更加OO,全面复制其API。Base则是想修复IE的Bug,让IE拥有标准浏览器的API,因此也把所有原生对象污染一遍。
剩下几个大类库就奉行非侵入的原则,尽量减少全局变量。如Ext还有更多小型类库,它会选择一个自定义对象(其实也是window的一个自定义属性),然后对它的属性进行扩展。基本思路是
Ext = {};
Ext.Element= function(){}
Ext.DomQuery = function(){}
Ext.DomHelper = function(){}
JQuery也是一个window自定义属性,而且从一开始就污染了两个(JQurey与$),因此一旦其他类库占用了$,它就退回用JQuery。它与Ext最大的不同的是。它是一个函数对象(Function),而不是一个纯对象(Object)。它的所有扩展都是基于它的JQuery.fn即JQuery.prototype。其他可能暴露出来的变量都收到闭包与函数中。
dojo上来就来就构建它无拟伦比的包机制。整个命名空间都是由eval生成,然后再慢慢往dojo上添加属性,情况同Ext。不过,它的设计是我见过的类库中最复杂的,涉及的领域也非常广泛,搞到代码量达到惊人的9千行(兼注释)。
MochiKit不知是不是从dojo中派生出来,没怎么研究。但它的组织形式与Ext与dojo很相似。
YUI与JQuery很相似,是一个函数对象,只不过它后面就没有像JQuery那么疯狂,什么都往原型中加。无疑,YUI与JQuery的理念是非常新颖的,函数比对象更能玩出花样,起码做链式操作也轻松性。但JQuery一开始就瞄准页面的那个DOM元素,而YUI,dojo,Ptototype,mootools等具有强大继承机制的,更乐意创建一个类,这就是JQuery在UI怎么也比不上它的前辈的原因。另外,YUI的作者们在CSS,HTML也造诣极深,因此其UI设计是非常值得学习的。
相关文档:
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table
2. <body onselectstart="return false"> 取消选取、防止复制
3. onpaste="return false" 不准粘贴
4. oncopy="return false;" oncut="re ......
Ajax框架 jQuery
jQuery是一款免费且开放源代码的JavaScript代码库,由John Resig创建。授权协议为GPL和MIT许可证双协议。示例代码: $("p.neat").addClass("ohmy").show("slow"); 特点轻量级经GZip压缩后传输的代码文件仅14KB,未经压缩传送的代码文件仅26KB。 jQuery 1.26版时: 档案档案行数档案Size 备注 jquery-1.2 ......
此文为读《JavaScript And DHTML Cookbook》后总结出来的笔记。由于当时是初学,所以笔记中难免有错误,欢迎指正。谢谢!
·字符串(String)
1.声明
var myString = new String("Every good boy does fine.");
var myString = "Every good boy does fine.";
&n ......
javascript定义二维数组的方法 javascript本身只支持一维数组,
有时非要用到二维数组的时候, 可以将一维数组的分项又定义为一个数组, 二维数组就是用数组构成的数组
Var aa=new Array(); //定义一维数组
for(i=1;i<=10;i++)
{
aa[i]=new Array(); //将每一个子元素又定义为数 ......