深入理解Javascript动态方法调用与参数修改的问题
Javascript中可以对所传参数在函数内进行修改,如下
代码如下:
function func1(name) {
name = 'lily';
alert(name);
}
func1('jack');//输出lily
function fun1(n) {
this.name = n;
}
function fun2(name) {
fun1.call(this,'lily');
alert(name);
}
fun2("jack");//输出"jack"
fun1函数想把fun2调用时的参数修改为“lily”,但没有成功。弹出的仍然是“jack”。思考下为什么?
实际上fun1还是有能力把fun2调用时的参数给修改掉的,利用caller属性
代码如下:
function fun1() {
arguments.callee.caller.arguments[0] = 'lily';
}
function fun2(name) {
fun1.call(this,name);
alert(name);
}
fun2("jack");//输出"lily"
可见,外层函数对于内层函数的调用栈是可见的,可修改的。
相关推荐
-
js onmousewheel事件多次触发问题解决方法
我想做一个首屏和第二屏之间滚动鼠标滚轮就可以整平切换的效果,遇到了很多问题,后来在kk的帮助下,终于解决了这个问题,甚是欢喜,于是记录一下: 我最初的代码是这样的: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <style> div { width: 700px; height: 1000px; } .red { back
-
UpdatePanel触发javascript脚本的方法附代码
一.预呈现数据无法更改 1.大家知道,预呈现的数据是无法更改的,以前可能提到过,这里再看demo,自定义一个控件 [DefaultProperty("Text")] [ToolboxData("<{0}:JsControl runat=server></{0}:JsControl>")] public class JsControl : WebControl { [Bindable(true)] [Category("Appeara
-
js触发onchange事件的方法说明
js中onchange事件是在客户端改变输入控件的值,比如一个textbox,会出发的一个事件.但是如果在js代码中改变一个textbox的value,而不是通过键盘输入改变一个textbox值的话,是不会出发onchange事件的. 那么,如何在js代码模式通过代码触发textbox控件的onchange事件呢,经过查阅资料,发现js提供了一个方法,可以触发控件的应该是所有事件.object.fireEvent()方法,使用方法如 object.fireEvent('onchange'),即可
-
javascript实现方法调用与方法触发小结
在js中,this关键字是一个比较让人有意思的东西,但是它的指向经常让初学者摸不着头脑. 其实要理解这个关键字,需要理清两个问题--"方法的调用和方法的触发" 下面先看一段代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>function</title> <script> function showThis(
-
JavaScript中的方法调用详细介绍
JavaScript中,如果function属于一个对象,那么通过对象来访问该function的行为称之为"方法调用".与普通的函数调用不同的是,在进行方法调用时,function中的this指代将发生变化 - this将指代用于调用该function的对象(该对象将成为方法调用的invocation context): 复制代码 代码如下: var x = 99; var sample = { x:1, act:function(a){ this.x = a*a;//
-
JS方法调用括号的问题探讨
移动端的html页面, 写了一个函数. 复制代码 代码如下: function showAlert(msg,fn){ showDialog("alert", msg,"温馨提示",260); if(isNull(fn) == false){ $("#SD_confirm").unbind("click"); $("#SD_confirm").bind("click",fn); } } f
-
js实现浏览器窗口大小被改变时触发事件的方法
本文实例讲述了js实现浏览器窗口大小被改变时触发事件的方法.分享给大家供大家参考.具体分析如下: 当浏览器的窗口大小被改变时触发的事件window.onresize 为事件指定代码: 复制代码 代码如下: window.onresize = function(){ } 例如: 浏览器可见区域信息: 复制代码 代码如下: <span id="info_jb51_net">请改变浏览器窗口大小</span> <script> window.onresiz
-
深入理解Javascript动态方法调用与参数修改的问题
Javascript中可以对所传参数在函数内进行修改,如下 复制代码 代码如下: function func1(name) { name = 'lily'; alert(name); } func1('jack');//输出lily 再看一个例子 复制代码 代码如下: function fun1(n) { this.name = n; } function fun2(name) { fun1.call(this,'lily'); alert(name);
-
struts中动态方法调用使用通配符
一.DMI动态方法调用的其中一种改变form表单中action属性的方式已经讲过了.还有两种,一种是改变struts.xml配置文件中action标签中的method属性,来指定执行不同的方法处理不同的业务逻辑:另外一种是使用通配符的方式.改变method属性的方式需要配置多个action,而且这些action定义的绝大部分都是相同的,所以这种定义是相当冗余的.因此,使用通配符就可以在一个action标签中代替多个逻辑处理的Action. 二.示范:(和之前的动态方法调用改变form表单acti
-
详解Struts2动态方法调用
动态方法就是一个Action对应多个请求,减少Action的数量 1.指定method属性 <action name="addAction" method="add" class="com.venn.action.HelloWorldAction"> <result>/jsp/add.jsp</result> </action> 2.感叹号(!)方式(不推荐使用) <action name=&
-
深入理解javascript动态插入技术
最近发现各大类库都能利用div.innerHTML=HTML片断来生成节点元素,再把它们插入到目标元素的各个位置上.这东西实际上就是insertAdjacentHTML,但是IE可恶的innerHTML把这优势变成劣势.首先innerHTML会把里面的某些位置的空白去掉,见下面运行框的结果: 复制代码 代码如下: <!doctype html><html dir="ltr" lang="zh-CN"> <head>
-
asp.net 中静态方法和动态方法调用的区别实例分析
复制代码 代码如下: //定义静态方法class SQLHelper { public static string aaa() { return "你好" } } 调用:SQLHelper.aaa(); // 类名.方法名 //定义动态方法class SQLHelper { public string aaa() { return
-
JavaScript RegExp方法获取地址栏参数(面向对象)
复制代码 代码如下: Request = { QueryString : function(item){ var svalue = location.search.match(new RegExp('[\?\&]' + item + '=([^\&]*)(\&?)','i')); return svalue ? svalue[1] : svalue; } } var key = Request.QueryString('key'); Request.QueryString是否跟AS
-
理解Javascript的动态语言特性
Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行:javascript提供eval()函数,用于动态解释一段文本,并在当前上下文环境中执行. 首先我们需要理解的是eval()方法它有全局闭包和当前函数的闭包,比如如下代码,大家认为会输出什么呢? var i = 100; function myFunc() { var i = 'test'; eval('i = "hello."'); } myFunc(); alert(i
-
浅谈javascript 迭代方法
五个迭代方法 都接受两个参数:要在每一项上运行的函数 和 运行该函数的作用域(可选) every():对数组中的每一项运行给定函数.如果函数对每一项都返回true,则返回true. filter():对数组中的每一项运行给定函数.返回该函数会返回true的项组成的数组. forEach():对数组中每一项运行给定函数.该函数没有返回值. map():对数组中每一项运行给定函数.返回每次函数调用的结果组成的函数. some():对数组
-
struts2.5+框架使用通配符与动态方法常见问题小结
概述:struts2.5以后加强了安全性,下面就是安全配置引发的问题 1.通配符: 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="usercrud" namespace="/" extends="struts-default"> <action name="test-*" class="com.gitee.dgwcode.action.UserCrudAc
随机推荐
- 国外大牛IE版本检测!现在IE都到9了,IE检测代码
- iOS实现无限循环滚动的TableView实战教程
- Perl文件句柄详解
- ASP.NET XmlDocument类详解
- php在数据库抽象层简单使用PDO的方法
- php判断ip黑名单程序代码实例
- Python修改Excel数据的实例代码
- Python中datetime常用时间处理方法
- ASP 中 Split 函数的实例分析
- 在IE模态窗口中自由查看HTML源码的方法
- Bootstrap实现水平排列的表单
- jsp网站永久换域名的处理过程
- JS多级连动菜单
- 利用shell编程实现DOS风格的Linux命令行
- 注入过程中遇到DB_OWNER的想法(图)
- Apache Shiro 使用手册(一) Shiro架构介绍
- 关于C# Math 处理奇进偶不进的实现代码
- Android 自定义一套 Dialog通用提示框 (代码库)
- PHP中Memcache操作类及用法实例
- C#使用虚拟方法实现多态