【问题标题】:Cant seem to execute function passed to a variable似乎无法执行传递给变量的函数
【发布时间】:2016-02-18 22:30:30
【问题描述】:

这是一个我正在尝试运行的 jQuery 插件。更具体地说,它是 Semantic Ui 的小部件之一,我试图在 Aurelia 中在一个 ES 6/7 环境中使用它。

这行得通:

return $(this.element)[this.methodTrigger]();

但事实并非如此:

let trigger = $(this.element)[this.methodTrigger];
return trigger();

其中$(...) 是一个 jQuery 选择器,this.methodTrigger 只是一个字符串,例如“rating”以加载语义 UI 评级小部件

我做错了吗?这是 ES6 中不允许的吗?它是否错误地转换为纯 JS?我是不是脑死了,没有看到明显的错误?

从语法上看,它应该可以工作......

【问题讨论】:

  • “不起作用”是什么意思?我的猜测是this 不正确。调用trigger() 使用全局范围或undefined 作为this
  • 第一部分有效,它在屏幕上正确显示小部件。第二部分什么都不做,没有小部件,但控制台上没有错误。
  • 打开你的控制台(按 F12)。你看到任何错误吗?我猜你会看到类似Cannot read property 'prop' of undefined
  • 我会在控制台中看到 something ,但什么也没有。第二部分就像什么都没发生一样执行。

标签: javascript jquery ecmascript-6 semantic-ui aurelia


【解决方案1】:

该值期望 this 引用一个 jQuery 对象,但是通过在调用它之前将函数分配给一个变量,您将丢失调用上下文。这意味着它被称为好像它是一个全局函数。您可以使用.bind手动设置上下文

let $this = $(this.element);
let trigger = $this[this.methodTrigger].bind($this);

【讨论】:

  • 成功了 :)。需要对我的 this 上下文更加警惕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多