`

EXT传递参数的问题 js函数的参数传递(arguments)

阅读更多

问题:

我在一个论坛看到EXT传递参数的问题,觉得很多学EXT的人都会碰到:
++++++++++++++++++++++++++++++++++++++++
通过示例代码中的msg-box.js
我们可以看到
Ext.get('mb1').on('click', function(e){
Ext.MessageBox.confirm('Confirm', 'Are you sure you want to do that?', showResult);
});
这样的代码,还有它的回调函数showResult:
function showResult(btn){
Ext.example.msg('Button Click', 'You clicked the {0} button', btn);
};

function showResultText(btn, text){
Ext.example.msg('Button Click', 'You clicked the {0} button and entered the text "{1}".', btn, text);
};
(这里我把两个回调函数都放上来,用来说明我的问题)
我想请教的是:其中的匿名函数function(e)、showResult(btn)及showResultText(btn, text)中的参数如何来定义,我如何才能知道这些函数的具体意义,因为这里好像没有文档可查。也许在这里提出这个问题让您不好回答,请继续往下看。我出 现这个问题是在这里遇到的:
在Layout Dialog示例中的layout.js中:
有dialog.addButton('Submit', dialog.hide, dialog);这样一行代码,也就是说增加一个submit按钮,点击后dialog隐藏。
但如果我想让这个按钮加入回调函数或获取某些特定内容的值,这样问题就出现了,我是这样实现的:
dialog.addButton('Submit', function(a,b){
alert(a);
alert(b);
}, dialog);
但我不知道function(a,b)中a和b代表什么(alert出来都是object,当我加到三个参数时就是未定义了,也就是说这个方法支持两个参数),因为好像这里没有文档。

当然,如果有其它方法来实现类似功能您也可以提出,但最好是解答一下我的问题,我不知道如何入手这个function

答:

  1. dialog.addButton( 'Close' ,function(){
  2. alert(arguments.length); // arguments是 内置数组变量 ; arguments 对象的 length 属性包含了传递给函数的参数的数目
  3. alert(arguments[0]);// function()可以不声明形参,直接调用格式:函数名 (参数1, 参数2, 参数.... )
  4. },dialog);

这个文档中其实是有说明的,而且不含糊,你仔细看的话就能理解。
看这个前先得理解各个支持事件响应的类的on或addListener方法,它的后面两个参数表示的是什么意思?scope和options,如 果你知道了,那么在事件触发的时候想调用自定义的或EXT中已有的函数就不费解了。这里scope(作用域)默认指的是事件触发时所作用的对象,而当事件 触发后会传递给响应函数什么参数呢?像普通的HtmlElement对象(比如一个表单按钮)都会传一个EventObject实例对象,像EXT中自定 义的函数触发的话,API中有说明:
比如Ext.MessageBox的confirm方法,是这么解释的:
confirm( String title, String msg, [Function fn], [Object scope] ) : Ext.MessageBox

Displays a confirmation message box with Yes and No buttons (comparable to JavaScript's confirm). If a callback function is passed it will be called after the user clicks either button, and the id of the button that was clicked will be passed as the only parameter to the callback (could also be the top-right close button).

看最后一句:and the id of the button that was clicked will be passed as the only parameter to the callback,只传递你所点击的按钮(“确认”或“取消”)的按钮本身或它的id,也就是说只有一个参数,这样的话,你的响应函数就可以定义成 function(aaa){...}那么这个aaa就是这个你点击的按钮的id了。

同样,再看一下Ext.MessageBox的prompt方法,是这么解释的:
prompt( String title, String msg, [Function fn], [Object scope], [Boolean/Number multiline], [String value] ) : Ext.MessageBox

Displays a message box with OK and Cancel buttons prompting the user to enter some text (comparable to JavaScript's prompt). The prompt can be a single-line or multi-line textbox. If a callback function is passed it will be called after the user clicks either button, and the id of the button that was clicked (could also be the top-right close button) and the text that was entered will be passed as the two parameters to the callback .

也就是会传递2个参数,
1、事件触发时所点击的按钮本身或按钮的id
2、在输入框中输入的文本值。
这样在你自定义或已有的响应函数你就可以这样定义了,function(first,second){...}其中第一个参数是1、中说的,第二个参数是2中说的。


另外,像EXT的API中很多组件都有Public Events这部分内容,就是会响应的事件列表,这个写法是什么意思呢?
比如,Ext.Window下的move事件,API中是这样写的:
move : ( Ext.Component this, Number x, Number y )

Fires after the component is moved.
Listeners will be called with the following arguments:

this : Ext.Component
x : Number
The new x position
y : Number
The new y position

指的是当move(窗口移动)事件发生时,会有3个参数产生,这3个参数是能够传递给你的响应函数的。那么这个时候你的响应函数就可以这样定义:
function(component,positionX,positionY){....}
(里面的参数名随便写),或者可以根据你的需要可以少定义几个参数,但是这里的话最多就是3个参数,而且是按move事件传递给你的参数顺序来的 (比如第一个参数一定是Ext.Component类型的,第二个参数一定是Number类型的,并且是个x坐标值,第三个参数一定是个Number类型 的,一定是个y坐标值),如果你非要这样定义:function(component,positionX,positionY,otherparam) {....}
那么你的函数体里其实是获得不了otherparam的。

EXT组件中的Public Events部分都是这样的。如果理解了事件机制,那么如何定义和使用响应函数就很顺利了。

分享到:
评论

相关推荐

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments 在JavaScript中,函数的形式参数和arguments之间存在着微妙的关系。为了深入理解这方面的知识,我们需要首先了解形式参数和实际参数的概念。形式参数指的是定义方法时所明确...

    JS函数动态传递参数的方法分析【基于arguments对象】

    js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参。 function box() { return arguments[0]+' | '+arguments[1]; //得到每次参数的值 } alert(box(1,2,3,4,5,6)); //...

    javascript arguments 传递给函数的隐含参数

    总之,`arguments`对象是JavaScript函数中一种非常重要的机制,它提供了一种访问函数参数的方式,增强了JavaScript函数的灵活性。通过`arguments`对象,我们可以编写出能够处理不定数量参数的函数,并且可以通过`...

    JS函数参数的传递与同名参数实例分析

    在JavaScript编程中,函数参数的传递是一个基础且重要的概念。正确理解和运用这一概念,对于编写高效且易于维护的代码至关重要。本文将深入分析JavaScript函数参数传递的原理,探讨同名参数在函数中的表现,并通过...

    JavaScript函数的定义方法及函数的参数和优化.docx

    为了优化函数参数,可以设计参数时注意,如果参数数量较少直接使用多个形参传参形式即可。一旦参数数量非常多,且存在很多可选参数,有些参数是不必要的,但是参数仍是按照顺序进行传递的,这个时候一定要把参数转换...

    wpf相互调用传递参数

    在Windows Presentation Foundation (WPF) 中,开发人员经常需要创建可独立运行的exe应用程序,并且在不同的上下文中互相调用,同时传递参数。这在多种场景下都非常实用,例如一个主程序启动另一个辅助程序,或者在...

    C#控制台程序之间参数传递

    总结一下,通过`Process`类启动另一个控制台程序并传递参数,然后在目标程序的`Main`函数中使用正则表达式解析参数,可以实现控制台程序之间的交互。这种方法在各种场景下都非常有用,比如在脚本自动化、系统集成...

    深入理解JS函数的参数(arguments)的使用

    总结起来,`arguments`对象是JavaScript中处理函数参数的利器,它允许我们灵活地获取和操作函数调用时传入的所有参数,不论这些参数是否在函数声明中预定义。不过,由于它不是真正的数组,所以在使用时需要注意不能...

    C# 调用函数时动态获取参数名称和值

    首先,理解C#的基础:在C#中,函数参数在编译时就已经确定,因此在函数调用时直接通过位置或命名传递。然而,要动态获取参数名称和值,我们需要利用反射(Reflection)和表达式树(Expression Trees)这两个强大的...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...

    js中方法重载如何实现?以及函数的参数问题.docx

    这里我们将详细讨论如何在JavaScript中实现方法重载以及相关的函数参数问题。 ### 方法重载的实现 #### 1. `arguments` 对象 JavaScript 中的每个函数都有一个内置对象 `arguments`,它是一个类数组对象,包含了...

    javascript函数速查

    从ES6开始,JavaScript允许为函数参数设置默认值,这样当传入的参数为undefined时,会使用默认值。例如: ```javascript function greet(name = 'Guest') { console.log('Hello, ' + name); } greet(); // Hello, ...

    JS:arguments

    总之,`arguments`对象是JavaScript中的一个强大而灵活的特性,它允许开发者以动态的方式处理函数参数,从而增强代码的可读性和可维护性。通过理解并熟练掌握`arguments`的使用,开发人员可以编写更加健壮、适应性强...

    arguments对象的使用

    在JavaScript编程语言中,`arguments`对象是一个非常重要的特性,特别是在处理函数参数时。它不是一个真正的数组,而是一个类数组对象,提供了访问函数调用时传递的所有参数的途径。无论函数定义了多少个形式参数...

    Python实现接受任意个数参数的函数方法

    首先,Python提供了一种简单的方法来定义可以接受任意数量的位置参数(positional arguments)的函数,即在参数名前加一个星号(*)。这种参数被称为可变位置参数,它们在函数内部以元组(tuple)的形式存在。这意味...

    Arguments是进行函数调用.doc

    总的来说,`Arguments`对象在JavaScript中扮演着重要的角色,它允许开发者灵活地处理函数参数,实现类似于函数重载的功能,同时也提供了对函数调用上下文的洞察。尽管如此,开发者应谨慎使用`Arguments`,因为它可能...

    javascript函数中的arguments参数

    总的来说,`arguments`对象提供了对函数参数的灵活访问,`arguments.length`和`arguments.callee`(虽然在现代JavaScript中不推荐使用)是两个关键属性,它们帮助开发者更好地理解和操作函数的参数。理解这些特性...

    关于javaScript注册click大事传递参数的不胜利问题_.docx

    在描述的问题中,开发者遇到了在`click`事件处理函数中传递多个参数的困扰。例如,尝试在`addEventListener`或`attachEvent`中直接传递参数的方式都是无效的,因为它们只会接收一个函数作为参数,而不会自动包含传递...

Global site tag (gtag.js) - Google Analytics