Les méthodes publiques de la programmation orientée objet en javascript
Je veux faire une classe javascript avec des méthodes qui je peux appeler au sein de la classe comme à l'extérieur de la classe. Je veux faire un "public" de la méthode, si vous voulez. Je veux getTextAreaElement
et appendTextArea
à de telles méthodes.
J'ai montré un extrait de code j'ai pu arriver jusqu'ici. J'ai aussi essayé de définir les méthodes de prototypes ainsi que l'intérieur de la classe (this.func = ...
). Mais qui ne m'a permis d'appeler la méthode à l'extérieur (new Socket().appendTextArea("osgjr89");
) mais PAS au sein de la classe elle-même! L'extrait de code ci-dessous montre l'exact opposé de mise en œuvre où je ne peux pas appeler la méthode en dehors de la classe, mais peut appeler cela de l'intérieur.
Erreur:
Uncaught TypeError: Object #Socket n'a pas de méthode 'appendTextArea'
socket.js:
function Socket() {
var socket;
var canvas = document.getElementById('c');
var context = canvas.getContext("2d");
if (window.WebSocket) {
socket = new WebSocket("ws://localhost:9012/websocket");
socket.binaryType = 'arraybuffer';
socket.onopen = onopen;
socket.onmessage = onmessage;
socket.onerror = onerror;
socket.onclose = onclose;
} else {
alert("Your browser does not support Web Socket.");
}
function getTextAreaElement() {
return document.getElementById('responseText');
}
function appendTextArea(newData) {
var el = getTextAreaElement();
el.value = el.value + '\n' + newData + " :)";
}
function onopen(event) {
getTextAreaElement().value = "Web Socket opened!";
}
/*[...]*/
}
main.js (les charges socket.js)
$(document).ready(function() {
var s = new Socket();
s.appendTextArea("osgjr89"); //ERROR!
});
Mis à JOUR socket.js:
function Socket() {
[...]
if (window.WebSocket) {
socket = new WebSocket("ws://localhost:9012/websocket");
socket.binaryType = 'arraybuffer';
socket.onopen = this.onopen;
socket.onmessage = this.onmessage;
socket.onerror = this.onerror;
socket.onclose = this.onclose;
} else {
alert("Your browser does not support Web Socket.");
}
this.getTextAreaElement = function() {
return document.getElementById('responseText');
}
this.appendTextArea = function(newData) {
var el = this.getTextAreaElement();
el.value = el.value + '\n' + newData + " :)";
}
this.onopen = function(event) {
this.getTextAreaElement().value = "Web Socket opened!";
}
[...]
}
Vous devez vous connecter pour publier un commentaire.
Toutes les méthodes publiques doivent être déclarés comme des propriétés, pas de variables/fonctions. Donc, vous avez à changer les choses comme cela:
en
onopen
de rappel n'est pas de feu (le serveur reçoit la connexion et répond normalement). J'ai mis à jour la question de la modification de la socket.js code. Chrome rapports pas d'erreur JS.this.onopen
avant vous l'utilisez àsocket.onopen = this.onopen;
.Socket
'sthis
dans une de ses propriétés (c'est à direvar socketThis = this;
), et puis j'ai appelé la méthode par le biais de la propriété (c'est à direthis.func...(event){ socketThis.otherFunc(); }
). C'est que la "bonne" façon de faire, ou recommandez-vous une autre méthode?Si vous ne
this.func = function() {}
, vous pouvez appeler la fonction à l'intérieur du Constructeur (Socket
dans votre cas) à l'aide dethis.func()
comme à l'extérieur, à l'aide de: