zoukankan      html  css  js  c++  java
  • js 函数的方法

      每个函数都包含两个非继承而来的方法: apply() 、 call()。

      两个方法都的用途都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。

      1、 apply() ,接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组;其中,第二个参数可以是 Array 的实例,也可以是 arguments 对象。

      2、call(),方法类似 apply() 方法,区别在于接收参数的方式不同;第一个参数是 this 不变,变的是其余参数都直接传递给函数。(需要将参数都列举出来)

      事实上,传递参数并非 apply() 、call() 的真正用武之地;他们的强大在于能够扩充函数运行的作用域:

      showColor() 也是作为全局函数定义的,当全局作用域中调用它时,对 this.color 求值会变成 window.color ,所以结果是 red。

      而 showColor().call(this) 和 showColor().call(window) 则是两种显示地在全局作用域中调用函数的方式,结果自然是 red。

      但是当运行 showColor().call(o) 时,函数的执行环境就不一样了,此时函数体内的 this 指向了 o,于是结果显示的是 blue。

      结论:使用 call() 或 apply() 来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。

      ECMAScript 5 还定义了一个方法: bind(),这个方法会创建一个函数的实例,其 this 值会被绑定到传给 bind() 函数的值:

      showColor() 调用 bind() 并传入对象 o,创建了 objShowColor() 函数,这个函数的 this 值等于 o。

      因此,即使全局作用域中调用这个函数,也会看到 blue。

  • 相关阅读:
    实验十二:面向对象基础 5、构造方法、重载
    实验十一:面向对象基础 3、类、对象、方法实训
    实验十:程序结构与数组 8、数组实训
    实验九:程序结构与数组 6、方法实训
    课后作业:情境三:程序结构与数组 5、方法
    Java获取随机数
    实验八:程序结构与数组 4、循环实训
    情境三:程序结构与数组 4、循环实训
    ES查询优化
    ES配置搜索规则
  • 原文地址:https://www.cnblogs.com/guofan/p/14518436.html
Copyright © 2011-2022 走看看