Java (OOP) の世界から来た私は、クラス、継承、およびマルチスレッドに慣れています。JavaScript ドメインでのちょっとしたウォークアバウトとして、これらのパラダイムとパターンを適宜利用してみます。読む: 並列実行にはプロトタイプ (「クラス」/オブジェクト) と WebWorker を使用します。ただし、この1つのケースは機能しません...
ワーカーを開始する 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 のプロトタイピングと「継承」は、このように機能することを意図していますか? これの代わりにプロトタイプ プロパティを常に使用する必要がありますか? 関数の代わりに this.myProperty にアクセスしたい場合はどうすればよいですか?
また、これをコンストラクターの Handler インスタンスにバインドする合理的な方法はありますか? 少なくとも、コードは長い Handler.prototype 参照で雑然としていません。
ありがとう!