zoukankan      html  css  js  c++  java
  • 实现简版 call

    原文地址:https://www.cnblogs.com/veinyin/p/13541651.html

    在学习 this 指向时,我们知道如果一个函数作为对象的方法执行时,this 指向这个对象

    那么实现 call 可以参考这个思路

    1. 在对象上添加函数

    2. 执行对象方法

    3. 删除为了改变 this 而在对象上添加的函数

    实现如下

     1 // 这里要用 function 不能用箭头函数,要通过 this 获取调用 myCall 的函数
     2 Function.prototype.myCall = function (ctx, ...args) {
     3     // ctx 是要设置的 this,没传或传入 null,就设为 window
     4     ctx = ctx || window 
     5 
     6     // 1. 在对象上添加函数. fn.myCall() 形式调用,可以看出在 myCall 中 this 就是 fn
     7     ctx.callFunc = this
     8 
     9     // 2. 执行对象方法. 保留执行结果用于返回
    10     const result  = ctx.callFunc(...args)
    11 
    12     // 3. 删除添加的函数
    13     delete ctx.callFunc
    14 
    15     // 4. 返回执行结果
    16     return result
    17 }

    以上实现还有优化空间,比如假如已经存在 callFunc 属性怎么办,可以取一个唯一的名字,比如 Symbol、随机数、随机字符串、时间戳等等

  • 相关阅读:
    css相关
    文章管理列表
    高性能MySQL基础篇
    mysql
    node.js开发实战
    React Hooks
    client-*,scroll-*,offset-*的区别
    将create-react-app从javascript迁移到typescript
    为Github项目添加Travis持续集成服务
    cookie储存
  • 原文地址:https://www.cnblogs.com/veinyin/p/13541651.html
Copyright © 2011-2022 走看看