- 对象,类,模块的概念可以让系统更清晰,亦能增强代码的重用性。目前 JavaScript 规范本身并不支持类或模块,正在制定中的 ECMAScript 6th Edition 将会纳入类,模块的概念,不过不知会是何年马月的事,毕竟这不能像 JDK 升级那么干脆。
还有种办法来写模块化的 JavaScript 就是使用微软的 TypeScript 或是 Google 的 Dart,它们是面向对象的编程语言,能直接编译成兼容的 JavaScript 代码,有条件的可以去尝试。
回到现实来,就现有的 JavaScript 规范怎么去模块化。众所周知,JavaScript 中函数是第一等公民,所以我们早先是这样使用函数来声明对象的:
1. 原始写法(比直接调用函数显得高级些):1function Module(){ 2 this.count = 10; 3 this.foo = function(x){ 4 return x+1; 5 } 6} 7 8var m1 = new Module(); 9console.log(m1.count); 10console.log(m1.foo(3));
Read More - 自 JDK1.4 引入正则表达式的支持可称得上是次大改变,
可 Java 的正则表达式的能力还是很弱,别说和 Perl 比了,就是和 C# 和 JavaScript 的正则表达式比较来也逊色不少,不过现在 JVM 上有其他语言对正则表达式有所增强,像 Groovy, jRuby 和 Scala。
[修正一下] 第一句话的说法是有误的,其实 JDK 本身的正则表达式就支持替换时用 $1, $2 那样的后向分组引用,例如:
String s = "abc def".replaceAll("(\\w+)\\s+(\\w+)", "$2 $1"); //s 就是 "def abc",replaceFirst 也可以用 $1, $2 的替换。比如在 Java 中要实现正则表达式的分组,后向引用的方式进行替换挺复杂的,像 JavaScript 完成两个分组的调换:1<script> 2 var src = "abc def"; 3 var des = src.replace(/(\w+)\s+(\w+)/, "$2 $1"); 4 document.write(des); 5 //输出为: def abc 6</script>
在 Java 中可得用上 Pattern, Matcher,还要 find()/group() 等操作,于是我就会考虑在 Java 中完成类似的功能有没有曲线的方法,有的。你可以调用 JVM 上其他语言的功能,我这里用列了两种实现方式
JDK1.6 起可借助 ScriptEngineManager 使用 JavaScript 相应的函数,除此之外还可用第三方的库 JRegex,具体实现,请参见如下代码,还带了测试用例:1package cc.unmi.utils; 2import javax.script.Invocable; 3import javax.script.ScriptEngine; 4import javax.script.ScriptEngineManager; 5 6import jregex.Pattern; 7import jregex.Replacer; 8 9public class StringUtils { 10 public static String replaceStringByJS(String src, String jsRegex, String replacement) { 11 ScriptEngineManager manager = new ScriptEngineManager(); 12 ScriptEngine engine = manager.getEngineByName("JavaScript"); 13 String script = 14 "function rep(target, regex, replacement){\n" 15 + " var patt = new RegExp(regex,'g');\n" 16 + " return target.replace(patt, replacement);\n" 17 + "}"; 18 19 try { 20 engine.eval(script); 21 Invocable inv = (Invocable) engine; 22 String result = (String) inv.invokeFunction("rep", src, jsRegex, 23 replacement); 24 return result; 25 } catch (Exception e) { 26 throw new RuntimeException(e); 27 } 28 } 29 30 public static String replaceStringByJRegex(String src, String regex, String replacement) { 31 Pattern pattern = new Pattern(regex); 32 Replacer replacer = pattern.replacer(replacement); 33 String result = replacer.replace(src); 34 return result; 35 } 36 37 public static void main(String[] args) { 38 String link="<link url=\"http://unmi.cc\" >\"Home\"</link>" 39 +"<link url=\"http://unmi.cc/tag/java\" >\"Java\"</link>"; 40 String jsString = StringUtils.replaceStringByJS(link, 41 "<link\\s+url=\\\"(.+?)\\\".[^/]*?>\\\"(.+?)\\\"</link>", "<a href=\"$1\">$2</a>"); 42 System.out.println(jsString); 43 44 String jregexString = StringUtils.replaceStringByJRegex(link, 45 "<link\\s+url=\\\"(.+?)\\\".[^/]*?>\\\"(.+?)\\\"</link>", "<a href=\"$1\">$2</a>"); 46 System.out.println(jregexString); 47 } 48 49 /* 50 * 程序输出 51 * <a href="http://unmi.cc">Home</a><a href="http://unmi.cc/tag/java">Java</a> 52 * <a href="http://unmi.cc">Home</a><a href="http://unmi.cc/tag/java">Java</a> 53 */ 54}
起初我是用的第一种方法,后来找到了第二种方式,感觉用 JRegex 更优雅些。 流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能丰富,加上它们众多的插件,几乎能实现任何你需要的功能,然而需要实现一些特定的功能,则可以选择功能更专一的轻量库,今天这篇文章与大家分享16个很有用的 JavaScript 库。
Blackbird: Open Source JavaScript Logging Utility
Blackbird 是一款非常酷的 JavaScript 调试工具,带有一个漂亮的界面显示和过滤调试信息。
Read More- 在开发中,借助得力的工具可以事半功倍。今天,这篇文章向大家分享最新收集的15款非常有用的 JavaScript 开发工具。
TestSwarm: Continious & Distributed JS TestingTestSwarm是Mozilla实验室推出的一个开源项目,它旨在为开发者提供在多个浏览器版本上快速轻松测试自己JavaScript代码的方法。
Read More - 在用 jquery 1.4.2 的 $.ajax() 时:
1$.ajax({ 2 url: "updateRoles.action", 3 data: form.serialize(), 4 dataType: "json", 5 success: function(msg){ 6 7 }, 8 complete: function(xhr,msg){ 9 alert(msg); 10 } 11});
在其他浏览器中表现的很好,但是在 IE(7/8) 下总报 parsererror 错误。在 jquery 中找到 parsererror,定位在 5989 行: Read More - jQuery插件能够增强网站的可用性,有效地改善用户体验,还可以大大减少创建一个新站点的开发时间。现在的jQuery插件很多,尽可以根据您的项目 要求来选择,不过也有一些插件很好用,几乎各种项目都能够用得上。这里就为您介绍12款开发中最常用的jQuery插件。
1.jQuery BBCode Editor
下载地址:http://www.w3theme.com/jquery-bbedit/
Bbcode简单易用,它是BBS、论坛、Blog等网络应用上的一种常用输入语法。jQuery BbCode Editor提供自定义设置,可以打造出很个性化的bbcode编辑器,它的源代码都可以根据需求灵活修改。 Read More - 曾经写过一篇 XSLT 文件中使用C#/JScript/VB 自定义函数 怎么用 C#/JScript/VB 在 XSL/XSLT 中自定义函数。那时候原本想直接用 JavaScript 来自定义函数,因为 JavaScript 哪台机器上都能跑,但出了些问题,所以实际中是用的 C# 自定义的 XSLT 函数。
这样的问题无论从哪方面讲都一直回避不了,情况是如果在 JavaScript 定义函数中直接把传入的参数返回是没问题的,但要作任何的处理,或者调用 JS 函数都会失败。XSLT 中的自定义函数,不对参数进行加工处理是没有意义的。比如在 XSLT 中写如下函数: Read More - 一个网页里时常会写多个提交按钮,可以点击不同按钮时分别设置某个隐藏域的值,都是提交到同一个页面,然后在处理页面可以知道应如何区别对待。也可能各自的 onclick 事件中改变 form 的 action 属性指向不同的处理页面后提交表章。在处理表单页面逻辑复杂且无多少相关性的时候,我会选择后一种处理方式。
可以今天碰到一个事情,在点击某个提交按钮,欲用(假设 form 的 id 为 'post')
document.getElementById('post').action='http://unmi.cc/some' Read More - jQuery 框架来说肯定没有哪个有 jQuery 用得那么广泛的,尤其是 jQuery 的插件思想吸引了众多贡献者。常常见到这样的应用,点击按钮时显示一个遮罩层,“请稍候,正在处理中......”。应该有不少类似功能的插件,我现在所用的是 BlockUI 插件,还有一个叫做 LoadMask 的插件也能实现。
据我相比较而言,觉得 BlockUI 插件要比 LoadMask 强大些,它们都可以选择性的遮住整个 Body 或是某个指定的元素。BlockUI 无论是功能还是界面定制性都比 LoadMask 要丰富些,例如 BlockUI 提供了 Overlay 遮罩层的渐入渐出式动画显示,JS 中的样式定制,消息提示的支持,提示层可显示在右上角,还可做出模态窗口,以及结束后进行函数回调。 Read More - 【原文地址】jQuery Intellisense in VS 2008
【原文发表日期】 Friday, November 21, 2008 2:07 AM
上个月,我在博客里宣布了微软将对jQuery提供支持。在过去的几个星期里,我们与jQuery开发团队合作,在Studio 2008 和 Visual Web Developer 2008 Express版本(免费的)中增加了很好的jQuery intellisense支持。现在这个支持可以下载使用了。在VS 2008中启用jQuery Intellisense的步骤
要在VS中启用jQuery的intellisense完成,你要遵循三个步骤: Read More