zoukankan      html  css  js  c++  java
  • call和apply

    首先个人感觉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传递参数是通过一个数组的形式传递

     

     

      

       

        

      

  • 相关阅读:
    中科大算法分析与设计分布式算法复习知识点
    记录一些实用网站
    《TensorFlow机器学习项目实战》pdf及源码
    DevC++连接MySQL可用详细教程
    【转】MySQL合理使用索引
    【原】基于Feign 重写自定义编码器
    【原】logback实现按业务输出到对应日志文件
    【原】MDC日志链路设计
    关于看源码的心得体会
    【原】基于Spring实现策略模式
  • 原文地址:https://www.cnblogs.com/qianqian-it/p/9526634.html
Copyright © 2011-2022 走看看