Javascript 似乎无法执行传递给变量的函数
这是我正在尝试运行的jQuery插件。更具体地说,它是语义用户界面的一个小部件,我正试图在传输的ES 6/7环境中的Aurelia中利用它 这项工作:Javascript 似乎无法执行传递给变量的函数,javascript,jquery,ecmascript-6,semantic-ui,aurelia,Javascript,Jquery,Ecmascript 6,Semantic Ui,Aurelia,这是我正在尝试运行的jQuery插件。更具体地说,它是语义用户界面的一个小部件,我正试图在传输的ES 6/7环境中的Aurelia中利用它 这项工作: return $(this.element)[this.methodTrigger](); 但这并不是: let trigger = $(this.element)[this.methodTrigger]; return trigger(); 其中,$(…)是一个jQuery选择器,this.methodTrigger只是一个字符串,类似于加
return $(this.element)[this.methodTrigger]();
但这并不是:
let trigger = $(this.element)[this.methodTrigger];
return trigger();
其中,$(…)
是一个jQuery选择器,this.methodTrigger
只是一个字符串,类似于加载语义UI评级小部件的“评级”
我做错什么了吗?这是ES6中不允许的吗?它是否正在向下传输到普通JS?我是不是脑死了,没有看到什么明显的问题
就语法而言,它看起来应该可以工作…该值期望
this
引用jQuery对象,但在调用函数之前将其分配给变量,则会丢失调用上下文。这意味着调用它就像调用一个全局函数一样。您可以使用手动设置上下文
你说它“不工作”是什么意思?我猜
this
不正确。调用trigger()
将全局作用域或未定义的用作此
。第一部分工作正常,并在屏幕上正确显示小部件。第二部分什么也不做,没有小部件,但控制台上没有错误。打开控制台(点击F12)。你看到错误了吗?我猜你会看到类似于无法读取未定义的属性“prop”的东西。第二部分的执行就像什么都没发生一样。这就成功了:)。需要对我的这个上下文更加警惕。
let $this = $(this.element);
let trigger = $this[this.methodTrigger].bind($this);