Ext为处理函数自定义输入参数的四种方法(转载)
2011-09-16 14:47
295 查看
1: 简单返回Function
原理说明:相对于EventHandler加了一层shell,原理是把参数转化为闭包的成员,然后随机返回函数,符合处理函数必定为Function类型即可。
演于代码片段
e1.on('click',function shell(arg1,arg2,.....));
function shell(arg1,arg2,.....)
{
//返回的是真正的Event Handler
return function()
{
//这里arg1,arg2仍然可使用,在同一闭包内的缘故
}
}
2:函数委托Function.prototype.createDelegate
原理说明:createDelegate允许设置你将对象绑定一个在其作用域下的函数,亦可将特定的多个参数写成数组传入到那个函数中。可选地,这需要一个参数来指定是否将参数列表传到参数数组arguments中去。如果这个第三参数没有传入,数组将是整个的参数列表。
特点:createDelegate方法需要将绑定一个作用域的对象(this), 若scope参数已指定了作用域的对象,显得多此一举。
演于代码片段:
//只要是Function类型的对象都可以使用createDelegate方法,其作用如下:
var fn=func1.createDelegate(scope,[arg1,arg2],true);
fn(a,b,c)===scope.func1(a,b,c,arg1,arg2);
var fn=func1.createDelegate(scope,[arg1,arg2]);
fn(a,b,c)===scope.func1(arg1,arg2);
var fn=func1.createDelegate(scope,[arg1,arg2],1);
fn(a,b,c)===scope.func1(a,arg1,arg2,b,c);
3:在scope参数中指定
原理说明:每一个处理函数都可以分配一个作用域的对象。即处理函数执行时,this指向的对象就靠紧贴着处理函数的参数后面的第三个参数来指定。
特点:只能传入一个“参数”。通常指定了处理函数的作用域就无须再引入“参数”的概念。
演于代码片段:
var onClick=function(){
alert(this.someProperty);
};
var scope = {
someProperty : 'shit'
}
Ext.get('somelink').on('click',onClick,scope);
4:在options参数中指定(推荐方式)
原理说明:你也可以传递自定义的参数到事件处理器。当你想在事件处理代码内部使用一个变量,而不想改变作用域时,这个功能就很有用了。要这样做基本上你只要将自定义参数添加到options对像,函数内容就可以变相到得到“参数”。
特点:“心血来潮”时加入“参数”方法,副作用少,也是最推存的方法。
演于代码:
function onClick(ev,target,options)
{
alert(options.somePropety); //alert 'somue'
}
var el=Ext.get('somelink');
el.on('click',onClick,null,{someProperty : 'somue'});
原理说明:相对于EventHandler加了一层shell,原理是把参数转化为闭包的成员,然后随机返回函数,符合处理函数必定为Function类型即可。
演于代码片段
e1.on('click',function shell(arg1,arg2,.....));
function shell(arg1,arg2,.....)
{
//返回的是真正的Event Handler
return function()
{
//这里arg1,arg2仍然可使用,在同一闭包内的缘故
}
}
2:函数委托Function.prototype.createDelegate
原理说明:createDelegate允许设置你将对象绑定一个在其作用域下的函数,亦可将特定的多个参数写成数组传入到那个函数中。可选地,这需要一个参数来指定是否将参数列表传到参数数组arguments中去。如果这个第三参数没有传入,数组将是整个的参数列表。
特点:createDelegate方法需要将绑定一个作用域的对象(this), 若scope参数已指定了作用域的对象,显得多此一举。
演于代码片段:
//只要是Function类型的对象都可以使用createDelegate方法,其作用如下:
var fn=func1.createDelegate(scope,[arg1,arg2],true);
fn(a,b,c)===scope.func1(a,b,c,arg1,arg2);
var fn=func1.createDelegate(scope,[arg1,arg2]);
fn(a,b,c)===scope.func1(arg1,arg2);
var fn=func1.createDelegate(scope,[arg1,arg2],1);
fn(a,b,c)===scope.func1(a,arg1,arg2,b,c);
3:在scope参数中指定
原理说明:每一个处理函数都可以分配一个作用域的对象。即处理函数执行时,this指向的对象就靠紧贴着处理函数的参数后面的第三个参数来指定。
特点:只能传入一个“参数”。通常指定了处理函数的作用域就无须再引入“参数”的概念。
演于代码片段:
var onClick=function(){
alert(this.someProperty);
};
var scope = {
someProperty : 'shit'
}
Ext.get('somelink').on('click',onClick,scope);
4:在options参数中指定(推荐方式)
原理说明:你也可以传递自定义的参数到事件处理器。当你想在事件处理代码内部使用一个变量,而不想改变作用域时,这个功能就很有用了。要这样做基本上你只要将自定义参数添加到options对像,函数内容就可以变相到得到“参数”。
特点:“心血来潮”时加入“参数”方法,副作用少,也是最推存的方法。
演于代码:
function onClick(ev,target,options)
{
alert(options.somePropety); //alert 'somue'
}
var el=Ext.get('somelink');
el.on('click',onClick,null,{someProperty : 'somue'});
相关文章推荐
- dojo小例子(15)给dojo on的事件处理函数传递自定义参数的两种方法
- JavaScript 通过 attachEvent 和 detachEvent 方法处理带参数的函数(示例代码)
- (用指针方法处理)有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。编写一个函数实现上述功能,在主函数中输入n个整数,并输出调整后的n个数
- 函数访问参数受限的处理方法
- Python - 不固定参数函数的定义,四种参数传递方法总结
- C++对cin输入字符的判断及分段函数处理方法示例
- 达芬奇工具链的建立(工程编译步骤),特别是函数中参数传递的输入方法
- JavaScript通过attachEvent和detachEvent方法处理带参数的函数
- 【转载】深入了解C语言(函数的参数传递和函数使用参数的方法)
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- 通知php使用自定义的session处理函数来操作session,而不使用php预置的方法
- 4.构造方法与重载:定义一个网络用户类,要处理的信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 ema
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- 自定义字符串处理函数(求长度,拷贝、拼接、比较)--两种方法
- python 的 threadpool 的处理函数输入 列表和字典当参数
- javascript中方法作为参数来处理(自定义方法对象)
- mfc中添加按钮对应的处理函数四种方法
- 【C】没有注意系统对函数参数的求值顺序的处理方法
- 初学Matlab:自定义函数中给定输入参数的默认值
- 1:时间戳转换成年月日函数,2:url截取参数方法,3:弹窗自定义方法 4:点击按钮加入购物车