zoukankan      html  css  js  c++  java
  • call方法的实现

    Call方法实现

    Call方法做了什么?将任意函数成为指定对象的方法进行调用;

    实现思路:让该函数在指定的对象中进行调用。即让该函数成为指定对象的方法并在指定对象调用完毕后进行删除这个方法;如果函数有返回值那么使用call方法调用该函数以后也应该有返回值。

    首先写一个Call方法函数

    function myCall(obj){
       注意: 这里需要传入一个实参obj
        obj = obj||window
        let obj.objFn = this //获取函数
        let params = [...arguments].slice(1)//获取第二位开始的形参,若未传入则为空
       
        let result = obj.objFn(...params);//获取函数调用的返回值
        delete obj.objFn
        return  result
    }
    

    几个关键要素

    1. Call方法内是否传入形参

    (1)无形参

    • 将实参obj赋值window(因为原生call方法在没有传入对象时就使用全局对象进行调用该函数)
    测试
    const obj1 = {
        name: 'obj1',
        f1() {
          console.log(this); 
        }
      }
      obj1.f1.call() //window
      
    实现
    obj = obj||window
    
    • 一个形参
    • 多个形参
      let params = [...arguments].splice(1)
      splice返回截取后的原数组
      一个形参:空数组slice(1)以后仍然返回空数组,
      多个形参:slice返回截取后的新数组
    
    1. 万一对象中有属性方法名为objFn:命名冲突(使用随意命名判断法解决)
    function myCall(obj){
      let UniqueId = Math.random()+'oo'
      while (obj.hasOwnProperty(UniqueId)) {
          UniqueId += '00'
          }
    }
    
  • 相关阅读:
    Vue 服务器端渲染(一)
    vue笔记 介绍及安装 一
    Node.js 学习笔记 (一) 安装配置
    Java开发中的23种设计模式详解(转)
    spring-boot整合ehcache实现缓存机制
    STM32流水灯
    SD卡封转及管脚说明
    随笔分类
    函数的设计之我见
    让灵魂追得上我们疲惫的身体
  • 原文地址:https://www.cnblogs.com/xjt31/p/14128568.html
Copyright © 2011-2022 走看看