主题:【原创】新时代新潮流WebOS 【1】 -- 邓侃
1. Lambda function--这个其实大家经常用,但是可能没注意到
如何指定事件源的事件处理过程呢?
javascript中其实就是用Lambda function是实现的。
如下代码大家一定经常写:
<input id='button1' type='button' onclick='alert("hello")' />
查看button1.onclick的值,就会发现是:function(){alert('hello');} (IE下,其他浏览器略有不同但原
理相同。)
当然,也可以写为:document.getElementById('button1').attachEvent('onclick',function(){
alert('hello');
});
在这里javascript用以Lambda function为基础实现的闭包解决了这个问题。
为什么说这是一大优点呢?对比JAVA就可以看出来:
类似的问题JAVA需要内部类/匿名类实现,如:
button1.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// do some work
}
}
);
优点一是显而易见的--省了代码量---至少不用定义一个类。
优点二: 事件处理一般要伴随状态迁移,这就使得事件处理过程一般带有边际效应。这也就使得为作为事
件处理过程的闭包的引用环境的确定格外重要。
java传递的实际上是匿名类的实例,各个事件处理函数的引用环境实际上是相对独立的。
但实际中,复杂的事件处理通常需要多个不同事件处理过程配合完成。一个稳定而共享的引用环境是比要的
。javascript中,通过method绑定就可以使某些事件处理函数中的this始终指向同一个对象。这样便于封装
状态机的实现。
2. dynamic objects
可以运行时改变类的定义,例子:
String.prototype.alert=function(){alert(this);};
从此,这样的代码就会自动弹出hello对话框:
'hello'.alert();
也就是说,你完全可以改造基础的javascript环境。
3.loose typing
这点如果没用,其他强类型语言也不用引入范式了
4.object literals
以此为基础的JSON经常被作为过于沉重的XML的数据交换时的替代品。
说实话,我平时既是与javascript无关的项目也多用它做控制数据交换,中间再嵌套XML来传递大量记录。
其实,我很认同为高人说的,javacsript是一中被误解很深的语言。从来都被人当玩具,都忘了当年
Netscape的server上也是可以跑javscript的。
这点跟早期的java很像,被人挡玩具看,如果不是被IBM看中了,也翻不了身吧?
说到JavaScript开发的易错难改---说实话我认识的很多开发者还不知道如何调试,跟踪javascript程序。
以上言论纯属抛砖引玉,欢迎指正疏漏
- 相关回复 上下关系8
压缩 7 层
🙂Script的质疑 邓侃 字552 2009-03-27 19:48:25
🙂script的优点,不仅是省了compiling&lin 6 t1000 字472 2009-03-28 08:41:41
🙂Compiling and Linking 1 邓侃 字1059 2009-04-01 09:44:55
🙂Lambda function--这个其实大家经常用,但
🙂T兄此篇应该独立成章 邓侃 字712 2009-04-06 02:05:48
🙂说点我写JS时的感受,连带试答邓兄的问题 3 moudy 字1354 2009-05-17 10:07:51
🙂深切的体会 1 邓侃 字53 2009-05-17 20:20:00
🙂邓兄谬赞了 1 t1000 字105 2009-04-08 03:53:17