JSFiddle - React, Tailwind, and code Playground
JavaScript
// Constructor
function Person(name){
// You don't need to reference "self" here. It's already implied.
this.name = name;
}
// Prototype
Person.prototype = {
getName : function(){
// 'this' in this case refers to an instance of Person. So, when creating
// John, this.name will be John.
return this.name;
},
openConnection : function(host, port) {
// Similar to getName(...), this refers to an instance of Person.
// In your example, this.pointCount is NOT shared between John and Adam.
this.pointCount = 0;
this.ws = new WebSocket("ws://" + host + (port ? ':' + port : ''));
// In WebSocket.onopen below, you're working with a new scope, so you won't
// have access to 'this' as the Person anymore. You need to save 'this'
// somewhere, so you can reference it in the new scope.
// *****
var self = this;
this.ws.onopen = function() {
// In this function, a new scope has been created. 'this' no longer
// refers to John/Adam (The instance of Person), but to WebSocket
// instead.
console.log(this); // 'this' references the WebSocket instance
console.log(self); // 'self' references the 'self' in the outer scope
// See *****
// Since this = WebSocket in this scope, all we need to do
// is this.send(...). If you'd like to obtain the refer
// to the instance of the Person you worked with, you can
// use the 'self' variable
this.send(self.name);
};
}
}
// Create two new person
var p1 = new Person("Jonh");
var p2 = new Person("Adam");
console.log(p1.getName()); // Prints Adam
console.log(p2.getName()); // Prints Adam
var TARGET_URL = "echo.websocket.org", TARGET_PORT = 7000;
p1.openConnection(TARGET_URL , TARGET_PORT ) // opens connection...