zoukankan      html  css  js  c++  java
  • 模拟实现apply

    模拟实现apply

    Function.prototype._apply = function (targetObject, argsArray) {
      // 若是没有传递,则置为空数组
      if(typeof argsArray === 'undefined' || argsArray === null) {
        argsArray = []
      }
    
      // 是否传入执行上下文,若没有指定,则指向 window
      if(typeof targetObject === 'undefined' || targetObject === null){
          targetObject = window
      }
    
      // 利用Symbol的特性,设置为key
      const targetFnKey = Symbol('key')
      // 将调用_apply的函数赋值
      targetObject[targetFnKey] = this
      // 执行函数,并在删除之后返回
      const result = targetObject[targetFnKey](...argsArray)
      delete targetObject[targetFnKey]
      return result
    }

    使用Symbol作为key,是为了防止重复,例如targetFnKey设置为cb,当传入的targetObject自身拥有cb这个方法,就会导致执行之后便呗delete,导致问题

    转自:https://mp.weixin.qq.com/s/tIasEjYJRaVqFMN_aVtpiw

  • 相关阅读:
    Vue_使用v-model指令写的简易计算器
    Vue_v-for的四种用法示例
    bs4_加载顺序
    Vue_自定义指令
    Vue_v-for中key的使用注意事项
    Vue_指令
    bs4_card(卡片)
    Vue_过滤器
    Vue_生命周期函数
    selenium 文件上传
  • 原文地址:https://www.cnblogs.com/hsmWorld/p/12802579.html
Copyright © 2011-2022 走看看