学习前端也有一段时间了,但是效果甚微。利用时间不够充分,虽然是利用工作之余来学习。但是这不能成为我的借口。
今天学习了(其实看了很多遍)call apply方法。
function abc(a,b){ return a + b; } function call1(num1,num2){ return abc.call(this,num1,num2); //call方法传递的参数方式为一个一个传递 } function apply1(num1,num2){ return abc.apply(this,[num1,num2]);//这里appl方法传递的参数需要是一个数组,在不确定传递 //的数量的时候,传递arguments是很方便的。 } //作用(1):调用函数 call1(10,20); //30 apply1(10,20); //30 //作用(2):扩充作用域 window.color ='red'; //color ='red' 这样也可以,不过带window开头更利于理解 //定义一个obj对象 var obj = { color:'blue' } var obj2 = { color:'green' } function sayColor(){ console.log(this.color); } sayColor.call(this); //'red'//在非严格模式下this===window sayColor.call(window); //'red' sayColor.apply(this); //'red' sayColor.apply(window); //'red' //在不带第二参数时,call,apply使用无区别 sayColor.call(obj); //'blue' sayColor.apply(obj);//'blue' //call,apply能做到很好的解耦 sayColor.call(obj2); //'green' sayColor.apply(obj2);//'green' //(3)在构造函数继承的使用,用来继承属性 function M(x,y){ this.x = x; this.y = y; return this.x + this.y; } function Mchild(a,b,c){ M.call(this,a,b); this.c = c; } var m1 = new Mchild(10,20,30); console.log(m1.x); //10 console.log(m1.y); //20 console.log(m1.c); //30