西西河

主题:【原创】新时代新潮流WebOS 【1】 -- 邓侃

共:💬594 🌺1902
全看分页树展 · 主题 跟帖
家园 Lambda function--这个其实大家经常用,但

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程序。

以上言论纯属抛砖引玉,欢迎指正疏漏

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河