首页 文章

原子包ternjs出错

提问于
浏览
0

对于Web开发(以及更多),我最喜欢的编辑器是伟大的原子编辑器,github的开源项目 .

像许多代码编辑器一样,我们可以通过安装大量插件来扩展它 . 其中,我使用atom-ternjs

使用tern.js进行原子的Javascript代码智能通过autocomplete-plus使用建议提供程序 .

今天我在编辑器窗口右上角的“警报样式”闪存消息框中显示此错误:

TypeError:无法在Object.exports.typeFromContext中的findTypeFromContext.NewExpression(/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/infer.js:1588:18)读取未定义的属性'CallExpression' (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/infer.js:1623:24)在Object.findCompletions [as run](/home/poremil/.atom/packages/atom-) ternjs / node_modules / tern / lib / tern.js:684:23)在对象上运行(/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/tern.js:218:30) . exports.withContext(/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/infer.js:774:18)/home/poremil/.atom/packages/atom-ternjs/node_modules/tern /lib/tern.js:225:13 at analyzeAll(/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/tern.js:339:15)at doRequest(/ home / poremil / . 原子/ packages / atom-ternjs / node_modules / tern / lib / tern.js:209:5)at Object.signal.mixin.request(/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib /tern.js:149:7)回应(/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/bin/tern:224:10)

但是,我的工作流程中没有发现任何特定错误 . 那就是说,我想了解发生了什么 .

我还在github项目上打开了an issue

1 回答

  • 1

    是的,这确实看起来像一个bug . 以下是破解代码的简化摘录:

    var findTypeFromContext = {
      NewExpression: function() { return this.CallExpression() }
      ,CallExpression: function() { console.log('calling expression'); }
    }
    var finder = findTypeFromContext['NewExpression'];
    finder();
    

    由于此关键字,这会中断 .

    • var finder = findTypeFromContext['NewExpression']; 赋值采用NewExpression方法"out"(从父对象分离) .

    • 通过此赋值,this关键字现在指向当前父对象 - 其中CallExpression不存在 .

    我的快速修复是立即调用对象上的函数,所以这仍然指向正确的位置:

    var findTypeFromContext = {
      NewExpression: function() { this.CallExpression() }
      ,CallExpression: function() { console.log('calling expression'); }
    }
    findTypeFromContext['NewExpression']();
    

相关问题