码迷,mamicode.com
首页 > 移动开发 > 详细

如何理解和熟练运用js中的call及apply?

时间:2017-12-22 15:54:27      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:理解   通过   改变   pre   就是   roo   lte   动态改变   class   

在前端开发过程中,我们经常需要改变this指向,通常我们想到的就是用call方法,但是对于call的理解很多人不是很清晰,那么下面小提莫就给大家详细说一说call和apply的详细知识。

call的第一个参数传对象,参数可以是任何类型(包括null)。例:call(obj,arg1,arg2,arg3)

apply第一个参数传对象,参数可以是数组或者arguments对象。例:apply(obj,[arg1,arg2,arg3])

call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

例如,我们经常会这样定义:

1 function Teemo(){
2 this.gift="mushroom";
3 this.say=function(){
4     console.log("I love "+this.gift);
5   }
6 }
7 var smallTeemo = new Teemo;
8 smallTeemo.say();

但是如果我们有一个对象Heimerdinger= {gift:"battery"},我们不想对它重新定义say方法,那么我们可以通过call或apply用smallTeemo的say方法:smallTeemo.say.call(Heimerdinger);

为了方便记忆:

提莫种蘑菇,大头摆炮台,安妮召唤熊。

有天大头想种蘑菇了

提莫.种蘑菇.call(大头,蘑菇)

大头就能种蘑菇了

提莫调皮了,也想召唤熊

安妮.召唤熊.call(提莫,熊)

就这样记住了。

 

 

如何理解和熟练运用js中的call及apply?

标签:理解   通过   改变   pre   就是   roo   lte   动态改变   class   

原文地址:http://www.cnblogs.com/zzqdkf/p/8085838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!