`
zhouyrt
  • 浏览: 1172642 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript动态方法调用与参数修改的问题

阅读更多

javascript中可以对传进去的参数进行修改,如下

function func1(name) {
	name = 33;
	alert(name);
}
func1();//输出33

 

如果这样呢?

 

function fun1() {
    this.name = 33;
}

function fun2(name) {
    fun1.call(this,name);
    alert(name);
}

fun2("Jack");//输出"Jack"


 

 fun2中调用fun1将name改变为33。但实际上输出的仍然是"Jack".原因是两个function的arguments是不同的。

 

但是可以修改下fun1,利用caller属性改变

 

function fun1() {
    arguments.callee.caller.arguments[0] = 33;
}

function fun2(name) {
    fun1.call(this,name);
    alert(name);
}

fun2("Jack");//输出"33"

 

这次输出的是33。所以外层的函数(fun2)对于内部调用的函数(fun1)来说,总是可见的。可以利用arguments.callee.caller取得调用函数。

 

 

 

分享到:
评论
6 楼 zhouyrt 2012-01-17  
Sartner 写道
额  ...  看了这边文章...
我去搜了一下callee 跟caller的区别...
嗯  觉得自己又NB了一点...

js中的caller和callee属性


严格模式中不让用了。
5 楼 Sartner 2012-01-17  
额  ...  看了这边文章...
我去搜了一下callee 跟caller的区别...
嗯  觉得自己又NB了一点...

js中的caller和callee属性
4 楼 jiangshaolin 2008-12-05  
我用可视化编辑的,怎么是这个样子....
3 楼 jiangshaolin 2008-12-05  
<div class='quote_title'>zhouyrt 写道</div>
<div class='quote_div'>
<p>javascript中可以对传进去的参数进行修改,如下</p>
<pre name='code' class='js'>function func1(name) {
name = 33;
alert(name);
}
func1();//输出33  <span style='color: #ff0000;'>此处加一个参数传进调用去更有说服力</span>

</pre>
<p> </p>
<p>如果这样呢?</p>
<p> </p>
<pre name='code' class='js'>function fun1() {
    this.name = 33;
}

function fun2(<span style='color: #ff0000;'>name</span>) {//<span style='color: #ff0000;'>name不是属性</span>
    fun1.call(this,name);
    alert(name);
}

fun2("Jack");//输出"Jack"


</pre>
<p> </p>
<p> fun2中调用fun1将name改变为33。但实际上输出的仍然是"Jack".原因是两个function的arguments是不同的。</p>
<p> </p>
<p>但是可以修改下fun1,利用caller属性改变</p>
<p> </p>
<pre name='code' class='js'>function fun1() {
    arguments.callee.caller.arguments[0] = 33;
}

function fun2(name) {
    fun1.call(this,name); 
    alert(name);
}

fun2("Jack");//输出"33"
</pre>
<p> </p>
<p>这次输出的是33。所以外层的函数(fun2)对于内部调用的函数(fun1)来说,总是可见的。可以利用arguments.callee.caller取得调用函数。</p>
<p> </p>
<p> </p>
<p> </p>
</div>
<p> </p>
2 楼 ake87 2008-12-01  
function fun1() {
    this.name = 33;
}

function fun2(name) {
    fun1.call(this,name);
    alert(this.name);
}

fun2("Jack");//输出"33"
1 楼 yunhaifeiwu 2008-11-28  
call 与apply功能相同,差别在于传入的参数表现形式不同。每个函数都具有该方法

call调用形式为: funName.call (obj,para1,para2....paran)

apply调用形式为: funName.call(obj,[para1,para2...paran])

它们的功能都是:调用名为funName的函数,该函数的参数是 para1,para2...paran,
同时funName开始执行,在此时也仅在此时funName函数的this中有obj属性,如果原来funName函数本身有obj对象 则其值会被覆。
function fun1() {  
    this.name = 33;  
}  
  
function fun2(name) {  
    //下面这句将调用fun1函数。传入的参数是name
    //此时的this对象,是fun2的对象,该对象仅有属性name
    //因此fun1在执行时,fun1的this中将有这里传入的fun2的对象(即fun2中的name值传到了fun1
    //的this中),虽然fun1已经有了name属性,但却被fun2对象中的name所覆盖。
    fun1.call(this,name);  
    alert(name);  
}  
  
fun2("Jack");//输出"Jack" 





这里,接楼主话题,对这两个函数的使用进行总结一番。

相关推荐

    深入理解Javascript动态方法调用与参数修改的问题

    本文将深入探讨Javascript中动态方法调用与参数修改涉及的知识点,帮助读者更好地理解这些高级特性。 首先,Javascript中的函数是一等公民,这意味着函数可以作为参数传递给其他函数,可以从其他函数返回,也可以...

    JS调用后台带参数的方法

    根据给定的信息,本文将详细解释“JS调用后台带参数的方法”。这涉及到前端JavaScript与后端服务之间的交互,特别是如何在发送请求时携带参数。 ### JS调用后台带参数的基本概念 在Web开发中,前端(通常是...

    JavaScript函数的调用以及参数传递

    JavaScript 函数调用 JavaScript 函数有 4 种调用方式。 每种方式的不同方式在于 this 的初始化。 this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象。 Note 注意 this 是保留关键字,你不能...

    Javascript调用WebService

    使用javascript 中Ajax技术调用WebService,包括JSP和ASP.NET中两种,其中JSP的WebService使用了XFire框架。 ASP.NET中的WebService做了一个方法示例GetProgress,包含3个参数。 JSP中的WebService做了hello方法的...

    初学者能够很快的学会各种java方法在javascript中是如何调用的。

    【标题】与【描述】提到的主题是关于初学者如何快速掌握在JavaScript中调用Java方法,通过使用DWR(Direct Web Remoting)这一开源项目。DWR使得AJAX(Asynchronous JavaScript and XML)的应用变得简单易行,从而...

    xe7android手机调用javascript

    3. 对于`addJavascriptInterface`,从Android 4.2(API 17)开始,如果没有`@JavascriptInterface`注解,JavaScript调用Java方法会抛出异常。 四、性能优化 1. 使用`shouldInterceptRequest()`:此方法允许你在`...

    ActionScript与JavaScript相互调用(论文)

    - **从JavaScript调用ActionScript**:允许JavaScript访问Flash影片中的对象和方法,从而实现对Flash影片的控制。 #### 3. 实现方法 - **在Flash中调用JavaScript**:可以通过`getURL()`函数来实现。该函数主要...

    javaScript获取浏览器参数

    - 调用`getQuery`方法并传入参数名`"userId"`。 - 如果URL中有`userId`参数,则返回其值;如果没有,则返回`null`。 #### 3. 实际应用场景 - **用户认证**:通过URL传递用户ID或令牌进行身份验证。 - **页面个性化...

    frida反射调用对象中的方法与字段.pdf

    本文主要讲解了在遇到需要操作Java对象的参数或返回值时,如何利用Frida这一动态代码插桩工具来进行反射调用,包括调用对象的方法和获取对象的字段。Frida是一个强大的动态代码插桩工具,它可以注入到几乎所有的进程...

    JavaScript中函数对象调用模式总结

    4. **apply/call调用模式**:这两个方法允许我们改变函数的上下文(`this` 的值)和传入参数。`func.apply(context, argsArray)` 和 `func.call(context, arg1, arg2, ...)`, 其中 `context` 是 `this` 的值,`...

    JavaScript本地调用的方法探讨 (1).pdf

    本文将深入探讨JavaScript调用本地程序的几种实现方式及其优缺点。 1. 自定义协议 自定义协议是一种常见的方法,它利用浏览器的注册表信息来创建一个特定的协议,如"MyFiles"。在注册表中,定义了一个名为"MyFiles...

    javascript动态添加表格数据行

    在JavaScript编程中,动态添加表格数据行是一种常见的需求,特别是在构建交互式的Web应用程序时。这个功能允许用户在不刷新整个页面的情况下添加新的记录,提高了用户体验。在这个例子中,我们将探讨如何利用...

    JavaScript动态网站开发案例指导

    JavaScript动态网站开发是现代网页和应用开发的核心技术之一,它为...实践中遇到问题时,可以参考压缩包中的"JavaScript动态网站开发案例指导"文件,它们提供了详细的步骤和示例代码,助你更好地理解和应用所学知识。

    源代码——MFC的WebBrowser控件 C++与JavaScript之间数据交互传递

    7. **C++到JavaScript的数据传递**:C++可以通过`IWebBrowser2::ExecWB`或`IWebBrowser2::Navigate2`方法执行JavaScript代码,将数据作为参数传递。也可以设置`IWebBrowser2`的`Document`属性,间接修改HTML页面内容...

    Finereport数据集参数实现动态列报表模板 + 函数JS代码

    在这个“Finereport数据集参数实现动态列报表模板 + 函数JS代码”的资源包中,我们将深入探讨如何利用FineReport的特性来实现动态列报表,并结合JavaScript(JS)代码来优化这一过程。 首先,动态列报表的核心在于...

    Dialog调用方法及参数说明.docx

    《Dialog对话框的调用与参数详解》 Dialog对话框是网页交互中常见的一种元素,用于展示信息、提示用户操作或者获取用户输入。在CS(客户端脚本)环境中,掌握Dialog的调用方法和参数设置至关重要,这直接影响到用户...

    Dialog调用方法及参数说明.pdf

    《Dialog调用方法及参数说明》 Dialog是网页中常用的一种对话框组件,它用于向用户展示信息或者进行交互操作。在CS(客户端脚本)环境中,Dialog的使用通常是通过JavaScript来实现的。本文将详细解析Dialog的调用...

    JS和Android本地方法之间的调用

    这个接口定义了可供JavaScript调用的方法,且这些方法会在Android运行环境中执行。 二、JavaScript调用Android本地方法 1. addJavascriptInterface:这是WebView提供的一种方法,用于将Java对象暴露给JavaScript。...

Global site tag (gtag.js) - Google Analytics