想把连接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()
添加回答
举报
0/150
提交
取消