2

クラス内でもクラス外でも呼び出すことができるメソッドを備えた 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!";
}
[...]
}
4

2 に答える 2

7

すべてのパブリック メソッドは、変数/関数ではなく、プロパティとして宣言する必要があります。したがって、次のように変更する必要があります。

function getTextAreaElement() {
    return document.getElementById('responseText');
}

の中へ

this.getTextAreaElement = function() {
    return document.getElementById('responseText');
}
于 2013-02-18T16:29:38.553 に答える
2

行う場合は、コンストラクター内 (あなたの場合) を使用しthis.func = function() {}て関数を呼び出すことができます。Socketthis.func()

var s = new Socket();
s.func();
于 2013-02-18T16:29:29.150 に答える