Javascript 如何正确地确定聚合物延迟运行的功能范围?
我试图将输入数据添加到一个数组中,该数组在最后一次击键后延迟了2秒。但是,当我运行此命令时,会出现以下错误:Javascript 如何正确地确定聚合物延迟运行的功能范围?,javascript,polymer,delay,Javascript,Polymer,Delay,我试图将输入数据添加到一个数组中,该数组在最后一次击键后延迟了2秒。但是,当我运行此命令时,会出现以下错误:uncaughttypeerror:this.\u validateInput不是一个函数 我如何正确地定义这一点。\u validateInput()以延迟运行 我尝试了让func=this.\u validateInput(),但似乎每次设置func时都会运行该函数 此外,onchange输入处理程序仅在输入失去焦点时激发 正在寻找解决这个问题的方法 <paper-input i
uncaughttypeerror:this.\u validateInput不是一个函数
我如何正确地定义这一点。\u validateInput()
以延迟运行
我尝试了让func=this.\u validateInput()代码>,但似乎每次设置func时都会运行该函数
此外,onchange输入处理程序仅在输入失去焦点时激发
正在寻找解决这个问题的方法
<paper-input id="itemId" on-input="_autoAddToArray"></paper-input>
<paper-input id="itemId" on-input="_autoAddToArray"></paper-input>
this
关键字总是指当前作用域的this
,当您在函数()中包装某些内容时,它会发生更改({…}
您需要将外部范围中的this
分配给变量
var self = this;
timeout = setTimeout(function () {
self._validateInput();
}, 2000);
Reference:关键字this
总是指当前作用域的this
,当您在函数()中包装某些内容时,它会发生更改({…}
您需要将外部范围中的this
分配给变量
var self = this;
timeout = setTimeout(function () {
self._validateInput();
}, 2000);
参考资料:使用lambda:
setTimeout(
() => this._validateInput(),
2000
);
或者绑定函数
setTimeout(this._validateInput.bind(this), 2000);
任何一种解决方案都应该有效
lambda之所以有效,是因为它没有自己的作用域。
绑定之所以有效,是因为它在运行它之前应用了作用域
setTimeout(
() => this._validateInput(),
2000
);
或者绑定函数
setTimeout(this._validateInput.bind(this), 2000);
任何一种解决方案都应该有效
lambda之所以有效,是因为它没有自己的作用域。
绑定之所以有效,是因为它在运行它之前应用了作用域,可以说,哪里定义了\u validateInput()
与\u autoAddToArray
的级别相同。更新了问题以匹配…那么为什么要使用此。\u validateInput()
。只要使用\u validateInput()
我就得到了未捕获的引用错误:\u validateInput未定义
当我尝试这样做时…你能分享fiddle吗\u validateInput()
定义在哪里?与\u autoAddToArray
的级别相同。更新了问题以匹配…那么为什么要使用此。\u validateInput()
。只需使用\u validateInput()
我得到未捕获的引用错误:\u validateInput未定义
当我尝试时…你能分享Fiddle吗?你可能有一个打字错误,第一行末尾的点。另外,请注意,您还可以将此
作为第三个参数传递,并将其作为回调中的参数,然后在其他名称下使用,例如上下文
。另外,如果您对ES6的使用还满意,您可以在回调中使用箭头函数语法,因为这个
没有绑定,所以您不会遇到这个问题。谢谢@mishu。我纠正了打字错误。将其作为第三个参数传递似乎在现代浏览器中起作用。但这项功能在旧浏览器中不可用。如果您想在基于聚合物的应用程序中支持Internet Explorer 9及以下版本,我猜setTimeout支持(可以用polyfill修补)是您的问题中最小的:)您可能有一个打字错误,第一行末尾的点。另外,请注意,您还可以将此
作为第三个参数传递,并将其作为回调中的参数,然后在其他名称下使用,例如上下文
。另外,如果您对ES6的使用还满意,您可以在回调中使用箭头函数语法,因为这个
没有绑定,所以您不会遇到这个问题。谢谢@mishu。我纠正了打字错误。将其作为第三个参数传递似乎在现代浏览器中起作用。但这项功能在旧浏览器中不可用。如果您想在基于聚合物的应用程序中支持Internet Explorer 9及以下版本,我猜setTimeout支持(可以用polyfill修补)是您的问题中最小的:)您知道哪种方法的性能最好吗?将this
设置为self
似乎效率很低。我知道这是本机设置。没有开销。所以我不知道还有什么比这个更有效,因为它返回的是整个聚合物元素,比单个函数大得多。你知道哪种方法的性能最好吗?将this
设置为self
似乎效率很低。我知道这是本机设置。没有开销。所以我不知道还有什么比这个更有效,因为它返回整个聚合物元素,比单个函数大得多。