3つのこと明確ではありませんでした:
1)まず第一に、私はあなたがこれを欠けていると思いますあなたのmyobject
関数の先頭からの行:
this.svgshape = svgshape;
私は、質問を投稿だけでエラーだったと仮定していて、その下に挿入されています。
2)通常、Prototype(または現代のライブラリ)を使用している場合は、コールバックに文字列を使用しないで、関数を使用します。また、通常DOM0の古い属性ではなく、addEventListener
/attachEvent
(observe
、Prototypeの場合)のラッパーを使用してハンドラーを割り当てます。だから、:
function myobject(svgShape) {
this.svgshape = svgshape;
$(this.svgshape).observe('click', this.doSomething); // STILL WRONG, see below
}
myobject.prototype.doSomething = function() {
alert("works");
}
3)しかし、(それは実際にそれらを必要としない)方法を持っているJavaScriptは、それだけの機能を持っていないので、上記のようthis
(コンテキストを保証しませんコール)が正しく設定されています。
function myobject(svgShape) {
this.svgshape = svgshape;
$(this.svgshape).observe('click', this.doSomething.bind(this));
}
myobject.prototype.doSomething = function() {
alert("works");
}
(またはあなたがそれを行うために、独自の閉鎖を使用することができますbind
の利点は、閉鎖は非常によく制御された環境であるので、doesnのことです。プロトタイプを使用すると、コンテキストを設定するbind
を使用したいです)
今は、PrototypeでSVGプログラミングを行ったことがないので、observe
が何らかの理由で動作しない場合は、onclick
に直接割り当ててみてください。反射特性:
function myobject(svgShape) {
this.svgshape = svgshape;
this.svgshape.onclick = this.doSomething.bind(this);
}
myobject.prototype.doSomething = function() {
alert("works");
}
私はまだbind
を使用していますので、this
に正しい値があります。私の貧血の小さなブログから
これらのポストは、上記のより多くの議論を提供します。
はStackOverflowのへようこそ!あなたの質問をしていたときの右側に、** How to Format **というタイトルのボックスがありました。 ** [?] **の質問エリアのすぐ上にある[page linked](http://stackoverflow.com/editing-help)のように、読む価値があります。それはあなたのコードを正しくフォーマットする方法を教えてくれるでしょう。 (私はあなたのためにこれを修正しました。)あなたは新しくなっています。まだお持ちでない方は、[FAQ](http:// stackoverflow。com/faq)は、あなたが慣れ親しんでいるさまざまなディスカッショングループ、メーリングリストなどと同じではありません。 –