• [每天解决一问题系列


    相同点:

    • 每个函数都包含这两个原生的方法
    • 他们两个的效果是一样的,用于在特定的作用域下执行函数,本质上是设置函数内this对象的值。

    不同点:

    • 传入的参数类型不同 。 apply(函数作用域,array[参数]), call(函数作用域,参数1, 参数2, 参数3...). 注意:函数作用域 参数不传或者null,默认为window;在严格模式下则为undefined, 即无效的作用域。

    应用场景:

    • 这两个函数最大的作用在于扩充函数赖以运行的作用域,其好处在于对象不需要与方法有任何的耦合关系,用“借鸡生蛋”来形容最恰当不过了。
    • 示例
      window.color = "red";
      var o = ( color: Oblue);
      function sayColor(){
      alert(this.color);
      sayColor() ; //red
      øayColor.ca11(tbis); // red
      øayColor.ca11(window); // red
      øayColor.call(o); //blue
      

        

    补充:

    • 在ECMAScript 5中还定义了一个方法bind(), 这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值.
    • 示例
      window.color = "red";
      var o = ( color: "blue " );
      function sayColor(){
      alert(this.color);
      var objectSayColor = sayColor.bind(o);
      objectSayColor(); // blue

      支持bind() 方法的浏览器有IE9+、Firefox4+ 、Safari 5.1+ 、Opera 12+和Chrome 。

    参照:

    • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
  • 相关阅读:
    第四章 Zookeeper技术内幕
    容器--TreeMap
    算法--红黑树实现介绍(二)
    算法---红黑树实现介绍(一)
    容器--WeakHashMap
    基础-WeakReference
    容器--IdentityHashMap
    容器--EnumMap
    容器--HashMap
    容器--Map和AbstractMap
  • 原文地址:https://www.cnblogs.com/xixifusigao/p/4210496.html
Copyright © 2020-2023  润新知