javascript - Atom 包 ternjs 出错

标签 javascript node.js package atom-editor ternjs

对于 Web 开发(以及更多),我最喜欢的编辑器是很棒的 Atom 编辑器,它是 github 的开源项目。

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

Javascript code intelligence for atom with tern.js. Uses suggestion provider by autocomplete-plus.

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

TypeError: Cannot read property 'CallExpression' of undefined at findTypeFromContext.NewExpression (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/infer.js:1588:18) at Object.exports.typeFromContext (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/infer.js:1623:24) at Object.findCompletions [as run] (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/tern.js:684:23) at run (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/tern.js:218:30) at Object.exports.withContext (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/lib/infer.js:774:18) at /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/.atom/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) at respond (/home/poremil/.atom/packages/atom-ternjs/node_modules/tern/bin/tern:224:10)

但是,a 没有注意到我的工作流程中存在任何特定错误。也就是说,我想了解发生了什么。

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

最佳答案

是的,这看起来确实像一个错误。 以下是破坏代码的简化摘录:

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

这会因为 this 关键字而中断。

  1. var finder = findTypeFromContext['NewExpression']; 赋值将 NewExpression 方法“取出”(与父对象分离)。
  2. 通过此赋值,this 关键字现在指向当前父对象 - 其中 CallExpression 不存在。

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

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

关于javascript - Atom 包 ternjs 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023924/

相关文章:

java - 未找到符号

javascript - 即使在启用 express CORS 中间件后,axios 请求上的 Access-Control-Allow-Origin 错误

javascript - 调用其他标签的onclick事件

java - 说包不存在

node.js - 将 htaccess 添加到 Ghost 项目

javascript - MongoDB 将 [{k1 :v1}, {k2:v2}] 转换为 {v1: v2}

php - 如何在我的 Laravel 包中包含 bootstrap 和 jquery

javascript - 如何在 Safari 中使用 AJAX 调用之前的 WebShareAPI?

javascript - Meteor.js 响应式 html5 地理定位 position.coords

node.js - 如何返回 Node.js 回调