zoukankan      html  css  js  c++  java
  • call()函数、apply()函数区别与意义

    使用apply函数或call函数的意义:

      在面对对象编程过程中,当A对象调用其他对象而非A对象方法是,该方法中所有的this引用都指向此方法所在的对象,而不是当前代码的上下文即A对象,

    为了保持this的原来的指向(即A对象),则需要使用apply或call函数。

    apply()和call()的区别:

    apply和call,它们的作用都是将函数绑定到另外一个对象上去运行

    原型分别是

    Function.prototype.apply(thisArg,argArray);
    Function.prototype.call(thisArg,[arg1],[arg2…]]); 

    从中可以看出,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,使得另外一个对象实例传入函数。

    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    而区别就在于第二个参数,apply()函数使用数组形式传入数值,call()函数以自由形式直接传入多个数值。

    示例:

    function Accomodation(){

      this.isAlarmed=false;

    }

    var AlarmSystem={

      arm:function(message){

      this.isAlarmed=true;

    alert(message);

      },
    disarm:function(message){
    this.isAlarmed=false;
    alert(message);
    }

    };

    var myHouse = new Accomodation();

    AlarmSystem.arm.call(myHouse,"Alarm activated");

    alert(myHouse.isAlarmed);      //true      arm()函数中的this值通过call()指向myHouse对象,使myHouse对象的属性发生改变

    AlarmSystem.disarm.apply(myHouse,["Alarm activated"]);

    alert(myHouse.isAlarmed);     //flase       arm()函数中的this值通过call()指向myHouse对象,使myHouse对象的属性发生改变

  • 相关阅读:
    ASP.NET请求管道、应用程序生命周期、整体运行机制
    PHP面试总结
    ASP.NET MVC源码分析系列
    SQL中的重要语句
    Nicescroll滚动条插件的用法
    Nunit2.5.10快速上手(笔记)
    ucore 源码剖析
    《ucore lab8》实验报告
    《ucore lab7》实验报告
    《ucore lab6》实验报告
  • 原文地址:https://www.cnblogs.com/Bideam/p/5582526.html
Copyright © 2011-2022 走看看