相同点:

  • 每个函数都包含这两个原生的方法
  • 他们两个的效果是一样的,用于在特定的作用域下执行函数,本质上是设置函数内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

相关文章:

  • 2021-10-06
  • 2021-09-05
  • 2021-06-24
  • 2022-12-23
  • 2021-10-05
  • 2021-11-01
  • 2021-08-09
猜你喜欢
  • 2022-02-07
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
  • 2021-10-17
相关资源
相似解决方案