首先个人感觉call和apply还是挺神奇的,简简单单就改变了this的作用域,下面我们来共同学习一下
1.call和apply的语法(改变this的作用域,有点像冒充的感觉,例子如下)
function.apply(thisObj,[“参数一”,"参数二"......] <script type="text/javascript">
function People(name,skill){ this.name=name; this.skill=skill; this.paly=function(){ alert( this.name+"使出了"+this.skill) } } var people1=new People("欧阳修","蛤蟆功"); var person=new Object();//重新创建了一个对象 People.apply(person ,["孙悟空","七十二变"]);//
这步改变了this的作用域,通俗的理解就是person对象冒充了People对象,
然后使用了People对象中的属性和方法 people1.paly(); person.paly() </script>
//弹出结果:
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]); <script type="text/javascript">
了解:
- 调用
call
的对象必须是个函数function call
的第一个参数将会是function改变上下文后指向的对象,- 第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function
- 调用
call
的方法会立即执行
function People(name,skill){ this.name=name; this.skill=skill; this.paly=function(){ alert( this.name+"使出了"+this.skill) } } var people1=new People("小鱼儿","吐泡泡"); var person=new Object(); People.call(person ,"啄木鸟","捉虫子"); people1.paly(); person.paly() </script>
代码基本没变,就是把apply替换成了call,作用相同,两者最大区别就是传递参数的方式不同,
通俗说
call传递参数是直接用双引号,然后一个接着一个传递
apply传递参数是通过一个数组的形式传递