クラス内でもクラス外でも呼び出すことができるメソッドを備えた JavaScript クラスを作成したいと考えています。もしよろしければ、「公開」メソッドを作成したいと思います。私はそのような方法でありたいgetTextAreaElement
と思っています。appendTextArea
これまでに思いついた最高のコードのスニペットを示しました。メソッドをプロトタイプとして定義することも、クラス内で定義することも試みました ( this.func = ...
)。new Socket().appendTextArea("osgjr89");
しかし、それはメソッドを ( )の外で呼び出すことしかできず、クラス自体の中では呼び出すことができませんでした! 以下のコード スニペットは、クラスの外部ではメソッドを呼び出すことはできませんが、クラス内では呼び出すことができる、正反対の実装を示しています。
エラー:
キャッチされていない TypeError: オブジェクト #Socket にはメソッド 'appendTextArea' がありません
ソケット.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 (socket.js の後にロード)
$(document).ready(function() {
var s = new Socket();
s.appendTextArea("osgjr89"); // ERROR!
});
更新された 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!";
}
[...]
}