js call apply
来源:互联网 发布:c语言要学多久才会 编辑:程序博客网 时间:2024/05/09 17:54
<input type="text" id="myText" value="input text">
<script>
function Obj(){this.value="对象!";}
var value="global 变量";
function Fun1(){alert(this.value);}
window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //对象!
</script>
<script>
var a="globalfunc";
var func=new function(){this.a="func"}
var myfunc=function(x){
var a="myfunc";
alert(this.a);
alert(a);
alert(x);
}
myfunc.call(func,"var");
myfunc.call(this,'xx');
myfunc.call(null,'xy');
myfunc.call();
</script>
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入
http://hi.baidu.com/arwen0129/blog/item/9abdf0385c76dafab311c77b.html 但是在很多情况下,我们需要找出数组中最大的元素 function getMax(arr){
var arr=[5,7,9,1]
alert(Math.max(arr)) // 这样却是不行的一定要这样写
var arrLen=arr.length;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
return ret;
}
这样写麻烦而且低效如果用 apply呢,看代码:
function getMax2(arr){
return Math.max.apply(null,arr)
}
再比如数组的push方法
var arr1=[1,3,4];
var arr2=[3,4,5];
如果我们要把 arr2展开,然后一个一个追加到 arr1中去,最后让 arr1=[1,3,4,3,4,5]
arr1.push(arr2) 显然是不行的 因为这样做会得到 [1,3,4, [3,4,5] ]
我们只能用一个循环去一个一个的push (当然也可以用 arr1.concat(arr2) 但是concat方法并不改变 arr1本身)
var arrLen=arr2.length
for(var i=0;i<arrLen;i++){
arr1.push(arr2[i])
}
自从有了 Apply ,事情就变得如此简单
Array.prototype.push.apply(arr1,arr2)
- js call apply
- js (this,call,apply)
- Js 的 apply()、call()
- js call apply
- Js call() 、apply() 详解
- js call()和apply()
- js call apply(转)
- JS Call()与Apply()
- Js apply call
- JS call & apply 应用
- js (this,call,apply)
- js继承 call apply
- JS call与apply
- JS Call()与Apply()
- js apply 与 call
- js--call and apply
- js-call和apply
- Js apply call方法
- getline cin while(cin >> x)
- 2座山
- 今天,怎能忘记
- 关于ClistCtrl 使用
- 页面事件(Init,Load,PreRender)执行顺序
- js call apply
- POJ 1080
- State模式源码示例
- RequisitPro管理需求的一般步骤
- 11
- (一) DLL编写
- 广搜模板——HDU ACM 1312解题报告
- eclipse快捷键
- C#解压RAR压缩文件(--转载--测试通过)