javascript - this.method 不是函数,绑定不起作用
问题描述
可能是一个非常简单的问题,但找不到这里发生了什么,这是我的情况:
我有一个在放置事件上触发的“ProjectBox”类的方法。此方法创建一个模态并将事件侦听器附加到模态内的按钮。
当按下该按钮时,它会向服务器发出一些数据并在回调完成时执行一个类方法。
我在调用类方法时遇到问题,我正在附加代码:
ProjectBox.prototype.handleDrop = function (e) {
// some code to create the modal
// function to attach to the event of button clicked ->
var choose_project_role_event = ()=> {
socket.emit( 'addProjectMember', {project_member: dragged_user, project_id: e.target.parentElement.parentElement.id, role: select_typeof_member.value }, ( reply )=> {
if ( reply.response ) {
this.printMember( reply.member_data )
}
})
}
choose_role_send.addEventListener( 'click', choose_project_role_event)
}
ProjectBox.prototype.printMember = function ( params ) {
app.js:1145 Uncaught TypeError: this.printMember is not a function
我读过箭头函数不需要使用 .bind( this ) 来解决范围问题,但我什至将代码修改为匿名函数并执行绑定,但我仍然遇到同样的问题。
这里发生了什么?我对这个很迷茫。
解决方案
这是一个函数范围问题。箭头函数作用域将采用外部函数的作用域,在这种情况下,这是window
因为它choose_project_role_event
是在全局作用域上定义的,而不是在对象/函数作用域内。
如果你想choose_project_role_event
访问实例成员,在这种情况下printMember
,你应该在类的原型中定义函数ProjectBox
。
推荐阅读
- android - Android studio 3.6 给 android:screenOrientation="portrait" 加红线,需要更改 android:screenOrientation="fullSensor" 吗?
- python - 解析共享邮箱中已发送邮件文件夹中的邮件
- java - 使用 Arrays.toString() 以及两端的方括号 '[ ]' 时,有什么方法可以从数组末尾删除多余的 0?
- java - Spring Data MongoDB,按长值搜索
- excel - Apache POI:使用公式 FormulaEvaluator 读取单元格值时,公式被删除
- javascript - 如何更改替换功能中的所有单词
- swift - 如何增加 websocket 的帧长度?
- python - 如何根据 dataframe1 1 中给出的值在两个 pandas 数据帧之间循环以选择要从 dataframe2 中提取的行范围
- java - Jackson OffsetDateTime 序列化 Z 而不是 +00:00 时区?
- javascript - 非常简单的 XMLHttpRequest 在我的机器上不工作,但在 W3C Tryit 编辑器中工作