javascript函数式编程---解决事件参数传递问题
2012-03-31 18:20
381 查看
说明:函数式编程的概念,是本人的理解之物,不属于正规的严密定义。
备用知识点:
引用
函数式编程------由于函数最终是一个值,因此函数可像普通变量一样参于各种运算,这就是函数式编程。
Js支持函数式编程。
Js的函数调用,可用两个括号括起来,第一个表示定义的函数,第二个表示参数。
例:
Java代码
alert(“aaa”);
(alert)(“aaa”)
(function(v){ return alert(v);})("aaa");
;
上面三个等效。第三个,这部份----“(function(v){ return alert(v);})”新定义了一个
函数;而这部份----“("aaa")”向新定义的函数传递参数;也就是说第三个,函数定义与
调用写在了一起。
序:js----指javascript
=======================================
在用js写UI组件,即对诸如div之类的封装时,不可避免的遇到一个困难。
当要在js所定义的对象中,为一个DOM节点的事件指定一个事件响应函数时,通
常这个事件响应函数的this对象是产生该事件的DOM节点,而得不到该函数所在
的对象。 另外,由于需要,通常还要为该事件响应函数传递其他参数。
此时的解决之道就是应用函数式编程。下面是具体的应用实例。
=======================================
例:下面的例子将由js,定义了一个Button对象,该对象生成一个按钮。
点击该按钮时,事件方法中既得到事件方法调用时的Button对象,又不丢产生事件的对象(例中是dom树中的button节点)。
Html代码
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<script language=Javascript>
function Button(value) {
this.value = value;
this.button = document.createElement("button");
this.button.appendChild(document.createTextNode("test"));
document.body.appendChild(this.button);
//注:这里才是点击事件的最终响应函数。
this.falert=function(classObj,e){
alert(classObj.value);
}
//下面onclick事件的右边第一个括符现定义了一个函数,这个函数的v参数,
//保存了onclick调用时的this对象,即Button对象;
// onclick事件的右边第二个括号传了onclick调用时的this对象即Button对象。
this.button.onclick = (function(v) {
return function() {
//调用Button对象的falert方法
v.falert(v,this);//这里的this是事件源对象,即dom树中的button节点
};
}) (this);
}
var bt = new Button("affffffffddda");
</script>
</body>
</html>
其中:
1 falert为点击事件的响应函数,该函数的classObj是调用onclick事件函数时的this对象,这里即是用户自已定义的Button对象。e为产生onclick事件的对象,这时即为
Button类中创建的button节点。
2 由此可看出,函数式编程,在不丢失事件源对象的前提下,成功地传递各种参数。
备用知识点:
引用
函数式编程------由于函数最终是一个值,因此函数可像普通变量一样参于各种运算,这就是函数式编程。
Js支持函数式编程。
Js的函数调用,可用两个括号括起来,第一个表示定义的函数,第二个表示参数。
例:
Java代码
alert(“aaa”);
(alert)(“aaa”)
(function(v){ return alert(v);})("aaa");
;
上面三个等效。第三个,这部份----“(function(v){ return alert(v);})”新定义了一个
函数;而这部份----“("aaa")”向新定义的函数传递参数;也就是说第三个,函数定义与
调用写在了一起。
序:js----指javascript
=======================================
在用js写UI组件,即对诸如div之类的封装时,不可避免的遇到一个困难。
当要在js所定义的对象中,为一个DOM节点的事件指定一个事件响应函数时,通
常这个事件响应函数的this对象是产生该事件的DOM节点,而得不到该函数所在
的对象。 另外,由于需要,通常还要为该事件响应函数传递其他参数。
此时的解决之道就是应用函数式编程。下面是具体的应用实例。
=======================================
例:下面的例子将由js,定义了一个Button对象,该对象生成一个按钮。
点击该按钮时,事件方法中既得到事件方法调用时的Button对象,又不丢产生事件的对象(例中是dom树中的button节点)。
Html代码
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<script language=Javascript>
function Button(value) {
this.value = value;
this.button = document.createElement("button");
this.button.appendChild(document.createTextNode("test"));
document.body.appendChild(this.button);
//注:这里才是点击事件的最终响应函数。
this.falert=function(classObj,e){
alert(classObj.value);
}
//下面onclick事件的右边第一个括符现定义了一个函数,这个函数的v参数,
//保存了onclick调用时的this对象,即Button对象;
// onclick事件的右边第二个括号传了onclick调用时的this对象即Button对象。
this.button.onclick = (function(v) {
return function() {
//调用Button对象的falert方法
v.falert(v,this);//这里的this是事件源对象,即dom树中的button节点
};
}) (this);
}
var bt = new Button("affffffffddda");
</script>
</body>
</html>
其中:
1 falert为点击事件的响应函数,该函数的classObj是调用onclick事件函数时的this对象,这里即是用户自已定义的Button对象。e为产生onclick事件的对象,这时即为
Button类中创建的button节点。
2 由此可看出,函数式编程,在不丢失事件源对象的前提下,成功地传递各种参数。
相关文章推荐
- 解决get方法传递URL参数中文乱码问题
- 待解决的问题 -------button下的参数传递!
- 解决Tomcat5.0.19中文参数传递的问题
- js中append字符串包含onclick无效传递参数失败问题解决方案
- 在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。
- 解决通过url传递中文参数乱码的问题
- 解决WCF接口无法传递object参数的问题
- JavaScript(js) 前台 参数传递乱码 转码 问题--已解决! 中文字符乱码
- 四种方案解决Form之间相互访问、参数传递的问题
- Flex-Jsp 中Flex和Jsp传递中文参数问题的解决方法!(Tomcat服务器)
- 解决WCF接口无法传递object参数的问题
- WAP上链接传递中文参数接收时乱码问题 解决就放分
- 解决get方法传递URL参数中文乱码问题
- struts2传递中文参数时乱码问题的解决
- 解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题
- 在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。
- 解决get方法传递URL参数中文乱码问题
- 解决get方法传递URL参数中文乱码问题
- JavaScript跳转页面/Action并传递中文参数[解决js超链接传递过程中产生的中文乱码问题]
- Flex与Severlet(Jsp)通信传递中文参数乱码问题的解决