Is there a way to access the parent object (not window
) within an event listener?
Currently, I am able to get window
using self
, and the WebSocket
object (which is the event listener target) using this
. However, what I really want is to retrieve the ScratchCloud
object (parent).
Here is the JS code:
var ScratchCloud = function(url, user, project) {
"use strict";
this.socket = new WebSocket(url); // Create socket
this.ws_status = function() {
var status = this.socket.readyState;
var message = "Scratch Cloud Data Socket (";
switch (status) {
case 0:
message += "Connecting";
case 1:
message += "Open";
case 2:
message += "Closing";
case 3:
message += "Closed";
}
message += ")"
return message;
}
this.ws_log = function(message, func, symbol) {
if (!func) {
func = console.log;
}
if (symbol) {
func(this.ws_status(), symbol, message);
} else {
func(this.ws_status() + ":", message);
}
};
this.ws_open = function(event) {
console.log(self === window);
self.ws_log();
var handshake = {
method: "handshake",
user: user,
project: project
};
handshake = JSON.stringify(handshake) + "\n";
self.ws_log(handshake, null, ">>");
event.target.send(handshake);
self.ws_log();
}
this.ws_error = function(event) {
this.ws_log(console.error, event, ">>");
};
this.ws_message = function(event) {
this.ws_log(console.log, event, ">>");
};
this.ws_close = this.ws_message;
this.socket.onopen = this.ws_open;
this.socket.onerror = this.ws_error;
this.socket.onmessage = this.ws_message;
this.socket.onclose = this.ws_close;
};
new ScratchCloud("wss://clouddata.scratch.mit.edu/", "<user-name>", "<scratch-project>");
Does anyone know how to access the ScratchCloud
instance in the ws_open
function? I have tried looking into this
and self
without any luck.