【发布时间】:2013-02-03 03:38:37
【问题描述】:
我想用我可以在类内和类外调用的方法创建一个 javascript 类。如果您愿意,我想制作一个“公共”方法。我希望getTextAreaElement 和appendTextArea 成为这样的方法。
我已经展示了迄今为止我能想到的最佳代码的 sn-p。我还尝试将方法定义为原型以及在类中 (this.func = ...)。但这只允许我在 (new Socket().appendTextArea("osgjr89");) 外部调用该方法,但在类本身内NOT!下面的代码 sn-p 显示了完全相反的实现,我不能在类外部调用该方法,但 可以 在内部调用它。
错误:
Uncaught TypeError: Object #Socket has no method '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(在 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!";
}
[...]
}
【问题讨论】:
标签: javascript oop methods