关于apply函数问题 function B(x){ return x==1;}var c=[1,2];alert(B.apply(this,c));alert(B(c));为什么第一个返回是TRUE,而第二个返回是FALSE?这二者有区别?我在B函数中加个ALERT(X)表明第一个调用传过去的只是1,而第二个调用传过去的是整个数组,这是为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function B(x){ return x==1;}var c=[1,2];alert(B.call(this,c));//falsealert(B(c));//false 比如说function A(a,b,c){}应该是A.apply(this,[a,b,c]);A.call(this, a, b, c);这样的调用方式,对参数的处理方式不同 alert(B.apply(c, [2, 1,0])); 这种方式传递时第二个参数为数组,确实是只传进去了数组中的第一个元素。难道传值的时候只拿了数组首地址上的元素???B(c) 传参的类型为object function B(x) { alert(x[0] + ":" + arguments[0][0]); return x == 1; } var c = [2, 1]; alert(B.apply(this, c));//只传入了c[0],首地址上的元素??? alert(B(c));//出入后为object 贴错,重来 function B(x) { alert(typeof arguments[0] + ":" + arguments[0]); return x == 1; } var c = [2, 1]; alert(B.apply(this, c));//只传入了c[0],首地址上的元素??? alert(B(c));//传入后类型为object 楼上的解释很正确。applay中第二个参数是一个参数数组。而直接用B(c)的方式就相当于使用的Function对象的B.call(this,c),这时,对应于B(x)只能够,x就变成了一个数组,所以x==1返回false apply其实很方便,处理参数很灵活 apply方法应用某一对象的一个方法,用另一个对象替换当前对象。apply([thisObj[,argArray]])参数thisObj 可选项。将被用作当前对象的对象。 argArray 可选项。将被传递给该函数的参数数组。 说明如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。call 方法调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[, [,.argN]]]]])参数thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。 说明call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。也就是说B.apply(this, c) 将c作为参数传入,其中c[0]传给B的第一个参数,c[1]传给B的第二个参数,c[3].....B.call(this,c[0],c[1],c[3]......) 同上面一个效果对否? js this问题 急!在线等,解决了,给50分! 学生项目 求思路 子页面向父页传值,找不到此函数 一个js搞了好久。。总是说对象不支持此属性方法 层之间用什么方法传递数据? Js类属性问题,非高手勿入内 如何利用javascript保持状态? 谁有 站内搜索引擎 原代码 请指 JS跑马灯问题 问个JS替换的问题.
{
return x==1;
}
var c=[1,2];
alert(B.call(this,c));//false
alert(B(c));//false
function A(a,b,c){}
应该是A.apply(this,[a,b,c]);
A.call(this, a, b, c);这样的调用方式,对参数的处理方式不同
难道传值的时候只拿了数组首地址上的元素???
B(c) 传参的类型为object
function B(x)
{
alert(x[0] + ":" + arguments[0][0]);
return x == 1;
}
var c = [2, 1];
alert(B.apply(this, c));//只传入了c[0],首地址上的元素???
alert(B(c));//出入后为object
{
alert(typeof arguments[0] + ":" + arguments[0]);
return x == 1;
}
var c = [2, 1];
alert(B.apply(this, c));//只传入了c[0],首地址上的元素???
alert(B(c));//传入后类型为object
apply方法
应用某一对象的一个方法,用另一个对象替换当前对象。apply([thisObj[,argArray]])
参数
thisObj
可选项。将被用作当前对象的对象。
argArray
可选项。将被传递给该函数的参数数组。
说明
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。也就是说
B.apply(this, c) 将c作为参数传入,其中c[0]传给B的第一个参数,c[1]传给B的第二个参数,c[3].....
B.call(this,c[0],c[1],c[3]......) 同上面一个效果
对否?