Skip to content
Archive of posts tagged JavaScript

Javascript 关键字高亮

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“> <html xmlns=”http://www.w3.org/1999/xhtml“> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>Untitled Document</title> <style type=”text/css”> <!– .adKeyword {  color: #FF0000; } –> </style> </head> <body> <p>  一个和尚挑水吃、两个和尚抬水吃、三个和尚没水吃。总寺的方丈大人得知情况后,就派来了一名主持和一名书记,共同负责解决这一问题。主持上任后,发现问题的关键是管理不到位,于是就招聘一些和尚成立了寺庙管理部来制定分工流程。为了更好地借鉴国外的先进经验,寺庙选派唐僧等领导干部出国学习取经;此外,他们还专门花钱请了天主教、基督教的神父传授MBA。神父呆了不久留下几个东东就走了,一个叫BPR,一个叫ERP。</p> <p> </p> <p>  书记也没闲着,他认为问题的关键在于人才没有充分利用、寺庙文化没有建设好,于是就成立了人力资源部和寺庙工会等等,并认认真真地走起了竞聘上岗和定岗定编的过场。</p> <p> </p> <p>  几天后成效出来了,三个和尚开始拼命地挑水了,可问题是怎么挑也不够喝。不仅如此,小和尚都忙着挑水、寺庙里没人念经了,日子一长,来烧香的客人越来越少,香火钱也变得拮据起来。为了解决收入问题,寺庙管理部、人力资源部等连续召开了几天的会,最后决定,成立专门的挑水部负责后勤和专门的烧香部负责市场前台。同时,为了更好地开展工作,寺庙提拔了十几名和尚分别担任副主持、主持助理,并在每个部门任命了部门小主持、副小主持、小主持助理。</p> <p> </p> <p>  老问题终于得到缓解了,可新的问题跟着又来了。前台负责念经的和尚总抱怨口渴水不够喝,后台挑水的和尚也抱怨人手不足、水的需求量太大而且没个准儿,不好伺候。</p> <p> </p> <p>  为了更好地解决这一矛盾,经开会研究决定,成立一个新的部门:喝水响应部,专门负责协调前后台矛盾。为了便于沟通、协调,每个部门都设立了对口的联系和尚。   协调虽然有了,但效果却不理想,仔细一研究,原来是由于水的需求量不准、水井数量不足等原因造成的。于是各部门又召开了几次会,决定加强前台念经和尚对饮用水的预测和念经和尚对挑水和尚满意度测评等,让前后台签署协定、相互打分,健全考核机制。为了便于打分考核,寺院特意购买了几个计算机系统,包括挑水统计系统、烧香统计系统、普通香客捐款分析系统、大香客捐款分析系统、挨上必死系统(简称IBS系统)、马上就死系统(简称MS系统)等,同时成立香火钱管理部、香火钱出账部、打井策略研究部、打井建设部、打井维护部等等。由于各个系统出来的数总不准确、都不一致,于是又成立了技术开发中心,负责各个系统的维护、二次开发。由于部门太多、办公场地不足,寺院专门成立了综合部来解决这一问题,最后决定把寺院整个变成办公区,香客烧香只许在山门外烧。 </p> <p> </p> <p>  部门多、当官的多档和开会自然就多,为了减少文山会海,综合办牵头召开了N次关于减少开会的会,并下达了“关于减少档的档”。同时,为了精简机构、提高效率,寺院还成立了精简机构办公室、机构改革研究部等部门。 </p> <p> </p> <p>  一切似乎都合情合理,但香火钱和喝水的问题还是迟迟不能解决。问题在哪呢?有的和尚提出来每月应该开一次分析会,于是经营分析部就应运而生了。分析需要很多数据和报表,可系统总是做不到,于是每个部门都指派了一些和尚手工统计、填写报表、给系统打工。</p> <p> </p> <p>  寺院空前地热闹起来,有的和尚在拼命挑水、有的和尚在拼命念经、有的和尚在拼命协调、有的和尚在拼命分析……忙来忙去,水还是不够喝、香火钱还是不够用。什么原因呢?这个和尚说流程不顺、那个和尚说任务分解不合理,这个和尚说部门界面不清、那个和尚说考核力度不够。只有三个人最清楚问题之关键所在,那三个人就是最早的那三个和尚。说来说去,就是***闲人太多了!他们说:“整天瞎分析个屁!什么***流程问题、职责问题、接口问题、考核问题,明明就是机构臃肿问题!早知今日,还不如当初咱们仨自觉自律一点算了!如今倒好,招来了这么一大帮傻B,一个个不干正经事还***人五人六的,跟屎盆子一样甩都甩不掉!”</p> [...]

jQuery 1.4正式发布:一起来看有哪些新变化(下篇)

距jQuery 1.4系列上篇发布已经有半个多月了(jQuery 1.4.1已经发布),由于年底比较忙,下篇的书写一直拖沓至今,实在是对不住各位读者。在上篇中总体介绍了jQuery 1.4版本的相关使用及更新,本打算下篇中构造一些代码实例,既要实用又要把函数特点体现出来,后来写起来才发现蛮难的。加之jQuery 1.4发布了有一段时间了,不少人已经写了这方面的文章,我准备把这一篇作为jQuery 1.4的资源汇总篇。 【官方资源】 jQuery官方网站:http://jquery.com/ jQuery官方为全面介绍jQuery 1.4建立的网站,希望人们能用14天来了解它:http://jquery14.com/ jQuery 1.4 官方API文档(包括1.4版本中新添加的和更改的函数):http://api.jquery.com/category/version/1.4/ 【相关文档及手册】 jQuery 1.4 API Cheat Sheet(在线版、pdf版、png版):http://futurecolors.ru/jquery/ jQuery 1.4中文API文档(chm版):http://www.cnblogs.com/kuku-1/archive/2010/01/22/1654318.html jquery 1.4手持设备版手册(如在IPhone上看) 【相关教程】 jQuery 1.4 Released: The 15 New Features you Must Know 中文译文:jQuery 1.4 发布:15个新特性实例精讲 coolnalu翻译的jQuery 1.4官方文档中文版 jQuery源码在线查看(可按方法搜索)(英文) jQuery 1.4 选择器在线测试(英文) 理解jQuery 1.4中的$.proxy()函数(英文) 深入浅出地解释jQuery 1.4中的$.param()函数(英文) 理解jQuery 1.4中的easing函数(英文) 理解jQuery 1.4中的.closest(Array)函数(英文) 在jQuery 1.4中index()函数更酷了(英文) jQuery中的事件委托(英文) jQuery事件:MouseOver [...]

jQuery 1.4正式发布:一起来看有哪些新变化(上篇)

为庆祝jQuery的四周年生日,jQuery官方团队正式发布了jQuery的1.4版本。在这个版本中,jQuery官方团队做了大量的编码、测试和文档工作,相对之前版本自然改进不少,让我们一起来看看有那些新变化吧。 本文分上下两篇,上篇主要总体介绍jQuery 1.4版本的相关使用及更新,下篇通过一些代码示例来展示更新的方法及新添加的方法。 【下载及调用】 像以往一样,官方提供了jQuery的两份拷贝,一份是压缩版本(使用Google Closure Compiler压缩,之前使用的是YUI),另一份是未压缩版本(用来调试和阅读)。 jQuery压缩版本(23kb,gzip压缩后) jQuery未压缩版本(154kb) 本博之前曾提议过通过google服务器加载jQuery,提高加载速度。现在,我们依然可以通过Google的服务器调用压缩后的jQuery 1.4版本文件,如下:   【新特性及变化】 在jQuery 1.4中,许多常用的jQuery方法被重写,这些改进不仅更易用,也带来了性能的显著提升。 <script src=”http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js”></script> 注:以下为概述,不详之处参见下篇的代码解释。 为一些方法添加设置函数(Setter Functions)在之前版本中,我们可以给attr()方法传入一个函数,将函数的返回值赋予某个属性。1.4中,这个功能被添加到了更多的方法中:.css()、 .attr()、 .val()、 .html()、 .text()、 .append()、.prepend()、 .before()、 .after()、.replaceWith(), .wrap()、 .wrapInner()、 .offset()、 .addClass()、 .removeClass()、 .toggleClass()。此外,在下面方法中,还可以传入当前值作为设置函数的第二个参数,供设置函数使用:.css()、.attr()、.val()、.html()、.text()、.append()、.prepend()、.offset()、.addClass()、.removeClass()、和 .toggleClass()。例如: jQuery(‘<img src=”enter.png” alt=”enter your name” />’) .attr(“alt”, function(index, value) { return “Please, ” + value; }); 更新了jQuery中序列化的核心方法jQuery.param()之前对于{foo: ["bar", "baz"]}序列化后的结果是“foo=bar&foo=baz”,现在为“foo[]=bar&foo[]=baz”。 这样更改的目的主要是告诉接收端,传入的是一个数组对象。 在jQuery.ajax中可在不指定dataType属性时,会根据response的content-type自动识别。 [...]

javascript函数作用域与闭包

8.8. 函数作用域与闭包         如第四章所述,JavaScript函数的函数体在局部作用域中执行,局部作用域不同于全局作用域.本章将解释这些内容和相关的作用域问题,包括闭包.[*] [*] 本章包含超前的内容,如果你是第一次阅读,可以跳过. 8.8.1. 词法作用域(Lexical Scoping)         JavaScript中的函数是基于词法作用域的,而不是动态作用域.这句话的意思是JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.定义一个函数时,当前作用域链被保存起来并成为该函数内部状态的一部分.作用域链的顶层(最初一层)是由全局对象构成的,这和词法作用域没什么明显的关联.然而,当你定义一个嵌套函数时,作用域链将包含外层函数(嵌套函数的外层函数.原文:the containing function).这就意味着,被嵌套的函数可以访问外层函数的所有参数和局部变量.         注意:尽管在一个函数定义的时候,作用域链就已经固定了,但是作用域链中定义的属性并不是固定的.作用域链是”活的”(“live”),当函数被调用的时候,它有权访问任何当前被关联的数据. 8.8.2. 调用对象(The Call Object)         当JavaScript解释器调用函数的时候,首先,它把作用域设置到作用域链,在函数被定义的时候,该作用域链已经有效.接下来,解释器添加一个叫做调用对象(ECMAScript规范使用术语:activation object,活动对象)的对象到作用域链的头部.引用Arguments对象的arguments属性为函数初始化调用对象.接下来,添加函数的命名参数到调用对象.所有用var语句定义的局部变量也都在这个对象中定义.因为调用对象在作用域链的头部,局部变量,函数参数和参数对象都在函数的作用域内.也就是说它们隐藏了所有同名的在更早的作用域中定义的属性. 注意:与arguments不同,this是关键字,而不是调用对象的一个属性. 8.8.3. 调用对象作为命名空间(The Call Object as a Namespace)         有时,用定义一个简单函数的方法创建一个调用对象是很有用的,这个调用对象可以扮演一个临时命名空间的角色,如此一来,你定义的变量和创建的属性都不会破坏全局命名空间.例如:假设你有一个Javascrip代码文件,你希望把它用到很多不同的Javascript程序中(或者,用于客户端Javascript,在很多不同的web前端网页上).假设这些代码像其它代码一样定义了中间变量来保存计算结果.现在的问题是因为这些代码将用于很多不同的程序,你无法知道此变量是否和其它引入该文件的程序的变量相冲突.         解决的方法是把代码放到函数里,然后调用这个函数.如此一来,变量是被定义在函数的调用对象中: function  init()  {      //  代码从这里开始      //  任何变量声明都会成为调用对象的属性      //  如此不会破坏全局命名空间. } init();   //  不要忘了调用这个函数哦!         这段代码只给全局命名空间添加了一个”init”属性,该属性引用init函数.如果定义一个函数还嫌太多,那么你可以用一个表达式定义和调用一个匿名函数.像这样的JavaScript语法如下: ( function ()  [...]

Javascript事件设计模式

事件设计概述 事件机制可以使程序逻辑更加符合现实世界,在JavaScript中很多对象都有自己的事件,例如按钮就有onclick事件,下拉列表框就有onchange事件,通过这些事件可以方便编程。那么对于自己定义的类,是否也可以实现事件机制呢?是的,通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率。本节就将详细介绍JavaScript中的事件设计模式以及可能遇到的问题。 最简单的事件设计模式 最简单的一种模式是将一个类的方法成员定义为事件,这不需要任何特殊的语法,通常是一个空方法,例如: function class1(){ //构造函数 } class1.prototype={ show:function(){ //show函数的实现 this.onShow(); //触发onShow事件 }, onShow:function(){} //定义事件接口 } 上面的代码中,就定义了一个方法:show(),同时该方法中调用了onShow()方法,这个onShow()方法就是对外提供的事件接口,其用法如下: //创建class1的实例 var obj=new class1(); //创建obj的onShow事件处理程序 obj.onShow=function(){ alert(“onshow event”); } //调用obj的show方法 obj.show(); 由此可见,obj.onShow方法在类的外部被定义,而在类的内部方法show()中被调用,这就实现了事件机制。 上述方法很简单,实际的开发中常用来解决一些简单的事件功能。说它简单,因为它有以下两个缺点: ? 不能够给事件处理程序传递参数,因为是在show()这个内部方法中调用事件处理程序的,无法知道外部的参数; ? 每个事件接口仅能够绑定一个事件处理程序,而内部方法则可以使用attachEvent或者addEventListener方法绑定多个处理程序。 在下面两小节将着重解决这个问题。 给事件处理程序传递参数 给事件处理程序传递参数不仅是自定义事件中存在的问题,也是系统内部对象的事件机制中存在的问题,因为事件机制仅传递一个函数的名称,不带有任何参数的信息,所以无法传递参数进去。例如: //定义类class1 function class1(){ //构造函数 } class1.prototype={ show:function(){ //show函数的实现 this.onShow(); //触发onShow事件 }, onShow:function(){} //定义事件接口 } //创建class1的实例 var obj=new [...]

javascript 闭包

写在前面的话: 试图翻译自 http://jibbering.com/faq/faq_notes/closures.html 文中大量提到《ECMA 262 》,我也没时间读这东西,可能有问题理解有误。希望纠正。 只译了前边部分,我得理解几天再继续下去。 英文水平差,凑合看吧。 国内找了半天没这篇文章中文版,献丑了就。 读后有种豁然开朗的感觉,清楚了很多javascript的问题。 一、Introduction Closure (闭包) A “closure” is an expression (typically a function) that can have free variables together with an environment that binds those variables (that “closes” the expression). 闭包是ECMAScript(javascript)语言强大的特征之一,如果没有真正的理解它的概念,不可能很好使用它。在一般浏览器环境中,它们很容易被建立,但也会造成比较难理解的代码逻辑。为了避免闭包引起的缺点,利用它所提供的优点,明白它的机制是重要的。javascript语言的闭包很大程度上依靠 scope chains(函数,变量的范围链) 和 javascript对象的灵活的属性机制 实现。 闭包简单的解释是,ECMAScript允许inner functions(嵌套函数):函数可以定义在另外一个函数里面(关于嵌套函数可以看看)。这些内部的函数可以访问outer function(父函数)的local变量,参数,其它内部函数。当内部函数被构造,并可以在函数外被获得(函数当成返回值),这个内部函数被在 outer function返回后被执行(在outer函数外执行),那一个闭包形成了。(简单的理解,function被当成数据类型传递或动态执行)。 inner function还有权利访问 那些outer function(父函数)的local变量,参数,其它内部函数。那些outer function(父函数)的local变量,参数,其它内部函数在outer function返回前就有值,并返回的inner [...]