Исходя из мира Java (OOP), я привык к классам, наследованию и многопоточности.Теперь для моей небольшой прогулки по домену JavaScript, я пытаюсь использовать эти парадигмы и шаблоны, где это применимо.Читайте: используйте прототипы («классы» / объекты) и WebWorkers для параллельного выполнения.Однако этот случай не работает ...
HTML-сайт, запускающий работника:
<html>
<head>
<script>
var worker = new Worker("worker.js");
worker.onmessage(event) {
// here be fancy script
}
worker.postMessage("run, worker, run!");
</script>
</head>
...
</html>
Работник, вызываемый HTML ("worker.js"):
self.loadScripts("handler.js");
var handler = null;
self.onmessage = function(event) {
if(!handler) {
handler = new Handler();
}
handler.compute();
}
Обработчик, вызываемый работником ("handler.js"):
function Handler() {
}
Handler.prototype = {
compute: function() {
this.doSomething(); // <-- ERROR! "this" points to the worker context,
// not to the Handler instance. So "doSomething" is
// undefined. However, the following line would work:
// Handler.prototype.doSomething();
},
doSomething: function() {
// More code here
}
}
Предназначено ли создание прототипов JavaScript и "наследование" таким образом?Должен ли я всегда использовать свойство prototype вместо этого?Что если я захочу получить доступ к this.myProperty вместо функции?
Также: есть ли разумный способ связать это с экземпляром Handler в конструкторе?По крайней мере, код не загроможден длинными ссылками на прототип Handler.
Спасибо!