2011-01-27 15 views
0

svg onClickを使用してプロトタイプ関数を呼び出そうとしています。Javascriptプロトタイプ関数とSVG setAttribute(onclick)

通常、プロトタイプ関数を呼び出すには、これを行うだけです(functionName)。.setAttribute(onclick, "this.(functionName)")に入れると、プロトタイプ関数が認識されません。誰もこれについて何か経験がありましたか?場合

以上は...それの基本的なJIST相続人を助けることが

function myobject(svgShape) { 
    this.svgshape.setAttribute(onclick, 'this.doSomething()'); 
} 
myobject.prototype.doSomething = function() { 
    alert("works"); 
} 
+0

はStackOverflowのへようこそ!あなたの質問をしていたときの右側に、** How to Format **というタイトルのボックスがありました。 ** [?] **の質問エリアのすぐ上にある[page linked](http://stackoverflow.com/editing-help)のように、読む価値があります。それはあなたのコードを正しくフォーマットする方法を教えてくれるでしょう。 (私はあなたのためにこれを修正しました。)あなたは新しくなっています。まだお持ちでない方は、[FAQ](http:// stackoverflow。com/faq)は、あなたが慣れ親しんでいるさまざまなディスカッショングループ、メーリングリストなどと同じではありません。 –

答えて

3

3つのこと明確ではありませんでした:

1)まず第一に、私はあなたがこれを欠けていると思いますあなたのmyobject関数の先頭からの行:

this.svgshape = svgshape; 

私は、質問を投稿だけでエラーだったと仮定していて、その下に挿入されています。

2)通常、Prototype(または現代のライブラリ)を使用している場合は、コールバックに文字列を使用しないで、関数を使用します。また、通常DOM0の古い属性ではなく、addEventListener/attachEventobserve、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に正しい値があります。私の貧血の小さなブログから

これらのポストは、上記のより多くの議論を提供します。

関連する問題