您好,欢迎访问一九零五行业门户网

实例汇总JS call()及apply()的方法使用

最近又遇到了jacvascript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧。
每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
相同点:这两个方法的作用是一样的。
都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
call()方法使用示例:
//例1 <script> window.color = 'red'; document.color = 'yellow'; var s1 = {color: 'blue' }; function changecolor(){ console.log(this.color); } changecolor.call(); //red (默认传递参数) changecolor.call(window); //red changecolor.call(document); //yellow changecolor.call(this); //red changecolor.call(s1); //blue </script> //例2 var pet = { words : '...', speak : function (say) { console.log(say + ''+ this.words) } } pet.speak('speak'); // 结果:speak... var dog = { words:'wang' } //将this的指向改变成了dog pet.speak.call(dog, 'speak'); //结果: speakwang
apply()方法使用示例:
//例1 <script> window.number = 'one'; document.number = 'two'; var s1 = {number: 'three' }; function changecolor(){ console.log(this.number); } changecolor.apply(); //one (默认传参) changecolor.apply(window); //one changecolor.apply(document); //two changecolor.apply(this); //one changecolor.apply(s1); //three </script> //例2 function pet(words){ this.words = words; this.speak = function () { console.log( this.words) } } function dog(words){ //pet.call(this, words); //结果: wang pet.apply(this, arguments); //结果: wang } var dog = new dog('wang'); dog.speak();
不同点:接收参数的方式不同。
apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
语法:apply([thisobj [,argarray] ]);,调用一个对象的一个方法,2另一个对象替换当前对象。
说明:如果argarray不是一个有效数组或不是arguments对象,那么将导致一个
typeerror,如果没有提供argarray和thisobj任何一个参数,那么global对象将用作thisobj。
call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
语法:call([thisobject[,arg1 [,arg2 [,...,argn]]]]);,应用某一对象的一个方法,用另一个对象替换当前对象。
说明: call方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisobj指定的新对象,如果没有提供thisobj参数,那么global对象被用于thisobj。
使用示例1:
function add(c,d){ return this.a + this.b + c + d; } var s = {a:1, b:2}; console.log(add.call(s,3,4)); // 1+2+3+4 = 10 console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14
使用示例2:
<script> window.firstname = "cynthia"; window.lastname = "_xie"; var myobject = {firstname:'my', lastname:'object'}; function getname(){ console.log(this.firstname + this.lastname); } function getmessage(sex,age){ console.log(this.firstname + this.lastname + " 性别: " + sex + " age: " + age ); } getname.call(window); // cynthia_xie getname.call(myobject); // myobject getname.apply(window); // cynthia_xie getname.apply(myobject);// myobject getmessage.call(window,"女",21); //cynthia_xie 性别: 女 age: 21 getmessage.apply(window,["女",21]); // cynthia_xie 性别: 女 age: 21 getmessage.call(myobject,"未知",22); //myobject 性别: 未知 age: 22 getmessage.apply(myobject,["未知",22]); // myobject 性别: 未知 age: 22 </script>
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关学习推荐:javascript视频教程
以上就是实例汇总js call()及apply()的方法使用的详细内容。
其它类似信息

推荐信息