标签:ffffff call 区别 arguments 经典 max get 第一个 app
整理一些网上的经典解答:
1 obj1.call(obj2,a,b); 2 //等价于 3 if(obj2!==null){ 4 obj1.this=obj2; 5 }else{ 6 obj1.this=window; 7 } 8 obj1(a,b);
1 var values = [1,2,3,4,5,6,9]; 2 var max = Math.max.apply(Math,values); 3 console.log(max);//9
这里Math当作apply()的第一个参数我无法理解,max()方法是Math对象下面的一个方法,values为一个数组对象,需要去借用Math对象下面的max()方法。
1 var values = [1,2,3,4,5,6,9]; 2 var max = Math.max.apply(Array,values); 3 console.log(max);//9
1 var values = [1,2,3,4,5,6,9]; 2 var max = Math.max.apply(this,values); 3 console.log(max);//9
发现用Array或者this代替 Math尽然都会输出9.
call和apply可以用来重新定义函数的执行环境,也就是this的指向
1 function changgeStyle(attr,value){ 2 this.style[attr] = value; 3 } 4 var box = document.getElementById("box"); 5 window.changgeStyle.call(box,"height","200px");
changgeStyle()为window对象下面的方法,那么如何把window对象的方法转移到box对象上呢,通过动态的改变this的指向,也就是相当于借用window.changgeStyle()的方法,通过call方法把 window.changgeStyle("height","200px")变成了box.changgeStyle("height","200px").
总结:就是自己没有的属性或者方法,通过改变函数的执行环境(this的指向),或者通俗点来说就是借用别人的属性或者方法来执行操作。
标签:ffffff call 区别 arguments 经典 max get 第一个 app
原文地址:http://www.cnblogs.com/yewenxiang/p/6166500.html