美文网首页自制前端框架
自制前段框架Day13.方法调用中的this

自制前段框架Day13.方法调用中的this

作者: 蚊子爸爸 | 来源:发表于2017-05-31 16:02 被阅读17次

目标很简单

it('处理一下方法调用的this问题', function () {
    var scope = {
      user={
        name: 'wangji',
        getName: function () {
          return this.name;
        }
      }
    }
    var fn = parse('user.getName()');
    expect(fn(scope)).toBe('wangji');
  });

想想现在是个什么情况。token解析肯定没问题,进入primary流程,遇到usertoken的时候生成Constant节点,然后遇到.,生成Member节点,user节点成为其object属性,getName成为其property属性。往下遇到左括号,生成Call节点,刚才生成的Member节点成为其callee属性,然后去查找有没有参数,发现没有,于是arguments属性为空。AST构建完成。

AST

接下来进入编译阶段,进入program递归流程,进入call节点,遍历callee属性是个member节点,产生变量V0,进入member节点的object递归,产生变量v1=scope.user,返回v1。进入member的property节点递归,完成后设置v0=v1.getName,返回v0。然后在call节点里面返回v0&&v0()
所以事实上这个函数里面根本没有绑定this。所以要修改:在函数调用的时候给这个函数指明一个上下文。

 case ASTBuilder.CallExpression:
      var callContext={}; //新增
      var callee = this.recurse(ast.callee,callContext);//新增
      var arguments=[];
      for(var i=0;i<ast.arguments.length;i++){
        arguments.push(this.recurse(ast.arguments[i]));

照这个思路今天把功能实现了,但是太困了不想写笔记了。。。结束吧还是。。

相关文章

  • 自制前段框架Day13.方法调用中的this

    目标很简单 想想现在是个什么情况。token解析肯定没问题,进入primary流程,遇到usertoken的时候生...

  • JDK动态代理

    RPC框架中,我们直接调用别人提供的接口,就执行InnovationHandler中invoke方法实现方法的远程...

  • SpringBoot日志学习

    日志框架 市面上的日志框架: 日志门面:即日志框架抽象层,在开发中,一般直接调用日志抽象层里的方法,而不是直接调用...

  • 自制前段框架Day12.Function Call

    端午的第一天我毛都没干,除了睡觉就是晃悠,还花了两三个小时在玩游戏。唯独看了看spring和mybatis,感觉也...

  • 框架:

    一个程序运行的顺序, 首先是从main方法开始走框架, 底层框架 调用 基础框架, 基础框架 调用 业务框架, 业...

  • dubbo基础

    dubbo框架就相当于一个通用的soa框架,在分布式开发中.不同的服务器之间要互相调用方法时,互相调用比较麻烦,所...

  • Bootstrap 前段框架

    http://www.bootcss.com/

  • Spring框架中调用HanLP分词的方法

    事情是这样的,最近实验室在搞一个Java Web的项目,用的Spring MVC的框架。项目组有很多没做过Spri...

  • JSPatch原理架构分析

    背景 为了快速认识整体框架,并且学习如何构思这个框架。 方法调用 我们希望在js实现这样的调用: UIView哪里...

  • dubbo use

    一. what is dubbo   dubbo是个rpc框架,核心是远程方法调用。围绕着远程方法调用拓展了:服务...

网友评论

    本文标题:自制前段框架Day13.方法调用中的this

    本文链接:https://www.haomeiwen.com/subject/sahjfxtx.html