我是node.js的新手,并且我想要求一个类。我已经使用https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes作为参考。但是,例如,当我这样做时:
// talker.js
class Talker {
talk(msg) {
console.log(this.say(msg))
var t = setTimeout(this.talk, 5000, 'hello again');
}
say(msg) {
return msg
}
}
export default Talker
// app.js
import Talker from './taker.js'
const talker = new Talker()
talker.talk('hello')
我得到:
talker.js:4未捕获的TypeError:this.say不是函数
应该说app.js是electronic.js渲染器进程,并且使用rollup.js捆绑在一起
任何想法为什么会这样?
更新: 对不起,我在输入伪代码时忘记添加一行。当我setTimeout
使用回调调用时,它实际上发生了。我已经更新了代码。
您正在失去方法的束缚this
。
从此更改:
setTimeout(this.talk, 5000, 'hello again');
对此:
setTimeout(this.talk.bind(this), 5000, 'hello again');
当您this.talk
作为函数参数传递时,它将接受this
并查找方法,talk
并传递对该函数的引用。但是,它仅传递对该函数的引用。与您所拥有的对象不再有任何关联this
。
.bind()
允许您传递对微小存根函数的引用,该存根函数将跟踪this
并以方式调用您的方法this.say()
,而不仅仅是say()
。
如果您只是这样做,则可以看到相同的内容:
const talker = new Talker();'
const fn = talker.say;
fn();
这将产生相同的问题,因为将方法分配给fn
根本没有关联talker
。它只是一个函数引用,与对象没有任何关联。事实上:
talker.say === Talker.prototype.say
是什么.bind()
做的是创建一个小存根功能,将保存对象的值,然后将使用该对象调用你的方法。
问题内容: 我正在努力推动 作为新的ID和json字符串的值。但是它给出了以下错误 提前谢谢您的回复 问题答案: 要使用Array的push函数,您的var必须是一个Array。 更改为以下内容: 包含的数组项将是typeof对象,您可以执行以下操作: 注意:请保持一致。在我的示例中,一个数组包含对象属性,而另一个仅包含对象属性。如果我使用或进行迭代,那么我将无法始终检查一个属性,因为我的示例包含
我在控制台中得到以下错误:。 也许问题出在不推荐的JSXTransformer上(https://facebook.github.io/react/blog/2015/06/12/deprecating-jstransform-and-react-tools.html)。建议使用Babel代替(在我的例子中,使用Babel!view/todolist代替jsx!view/todolist)。我对此
对于提交另一个未捕获的TypeError我感到很糟糕:未定义不是一个函数问题。但是,在阅读了大约20种不同的答案后,我不是错过了重点,就是问题在这些情况下是不同的。 我有一个有两个单选按钮的表单。单击一个时,我希望它更改标记的innerHTML。 这是我的小提琴。 HTML: JavaScript: 我尝试了几个不同的版本,比如使用属性和创建命名函数。它们都给了我同样的错误。非常感谢您帮助我了解我
问题内容: 我正在尝试使webpack和mapbox-gl在Meteor系统中一起工作。我到处都在寻找有关上述错误的信息,但是没有任何效果。这是我的webpack设置 供您参考,我使用了Reactive Stack提供的webpack,它设置webpack的方式略有不同。 这是我的npm设置 我做错了什么?感谢MDG的人可以解释该错误,因为我认为它与Meteor系统有关。仅供参考,我用来运行页面
问题内容: 我有一个简单的对象,如下所示: 我需要创建两个数组。第一个数组是对象中所有键的数组。我通过以下方式创建了此数组: 这很好。我得到了一些国家。现在,当我尝试从值创建数组时… 我收到此错误: 我不知道我在做什么错。我在声明前后,对象仍然相同。如何正确使用? 问题答案: 在许多浏览器中不受支持-您可以用来获取所有值的数组: 请参见MDN文档:https://developer.mozilla
无法理解为什么在尝试实现此角度代码时会出现TypeError。它在类({constructor:function(){}})周围生成错误。不确定原因。谢谢你的帮助