首页 > 解决方案 > 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 ) 来解决范围问题,但我什至将代码修改为匿名函数并执行绑定,但我仍然遇到同样的问题。

这里发生了什么?我对这个很迷茫。

标签: javascript

解决方案


这是一个函数范围问题。箭头函数作用域将采用外部函数的作用域,在这种情况下,这是window因为它choose_project_role_event是在全局作用域上定义的,而不是在对象/函数作用域内。

如果你想choose_project_role_event访问实例成员,在这种情况下printMember,你应该在类的原型中定义函数ProjectBox


推荐阅读