为了账号安全,请及时绑定邮箱和手机立即绑定

push()函数undefined

push()函数undefined

陪伴而非守候 2018-10-10 13:15:06
想把连接websocket的ws export出去后在别的地方拿到resList
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

var websocket = {}var ws = {    resList: [],    socket:null,    init: function() {
        websocket.onopen = function() {            var _this = this
            console.log(_this)
        }
    },
}

ws.init()
websocket.onopen()

在google chrome 的console中cv以上代码,这是你的代码简化版,可以看到输出的_this指向websock对象,因为此时调用onopen方法的是websock,符合this的隐式绑定原则;我们把var _this = this 移到init()作用域,就像这样:

var websocket = {}var ws = {    resList: [],    socket:null,    init: function() {        var _this = this
        websocket.onopen = function() {            console.log(_this)
        }
    },
}

ws.init()
websocket.onopen()

再输出就发现,_this将init()的this带了进来,因为init()由ws调用,所以他的this指向ws,从而_this也指向ws,符合你的要求

如果你对this绑定有疑问,可以参考我的博客

或者,如果你们使用es6的话,可以使用胖箭头函数:

var websocket = {}var ws = {    resList: [],    socket:null,    init: function() {
        websocket.onopen = () => {            console.log(this)
        }
    },
}

ws.init()
websocket.onopen()


查看完整回答
反对 回复 2018-11-21
  • 1 回答
  • 0 关注
  • 787 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号