浏览 3452 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-28
最后修改:2008-12-01
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取得调用函数。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-28
最后修改: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" 这里,接楼主话题,对这两个函数的使用进行总结一番。 |
|
返回顶楼 | |
发表时间:2008-12-01
function fun1() {
this.name = 33; } function fun2(name) { fun1.call(this,name); alert(this.name); } fun2("Jack");//输出"33" |
|
返回顶楼 | |
发表时间:2008-12-05
zhouyrt 写道
javascript中可以对传进去的参数进行修改,如下 function func1(name) {
name = 33;
alert(name);
}
func1();//输出33 此处加一个参数传进调用去更有说服力
如果这样呢?
function fun1() { this.name = 33; } function fun2(name) {//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取得调用函数。
|
|
返回顶楼 | |
发表时间:2008-12-05
我用可视化编辑的,怎么是这个样子....
|
|
返回顶楼 | |