2012-09-29 3 views
8

DOM要素を変更してそのプロトタイプに追加することができます。我々は唯一のキャンバスに、我々はこのような何かをしたいために何かを追加したい場合たとえば、:要素のインスタンスに関数をアタッチする

HTMLCanvasElement.prototype.doSomething = function(arg) { ... }; 

私たちは、その後、canvas要素の上にこのアクションを実行することができます。

var canvas = document.getElementById('canvasId'); 
canvas.doSomething(...); 

がそれですHTMLCanvasElementのプロトタイプを変更することなく、このキャンバスのインスタンスに関数を追加/追加することができます。私は、doSomething(...)がDOMのすべてのキャンバス要素ではなく、追加のメソッドにアクセスできるように呼び出されたキャンバスのみが必要です。これどうやってするの?

私はdoSomethingの機能に次のように試してみた:

this.prototype.foobar = function() {...} 

ただし、プロトタイプはここで定義されていません。あなたが直接jQueryを使って、あなたのキャンバスオブジェクトにmethod

var canvas = document.getElementById('canvasId'); 
canvas.doSomething= function() {...}; ///doSomething will only be available to this particular canvas. 
canvas.doSomething(...); 

答えて

5

Shuslは私が正しい答えを考え出す助けました。私が思ったよりも簡単でした。私のdoSomething(args)関数では、オブジェクトのプロトタイプを修正するのではなく、関数を直接追加しました。

HTMLCanvasElement.prototype.doSomething = function(args) { 
    this.foobar = function(args) { ... }; 
} 

var canvas = document.getElementById('canvasId'); 
canvas.doSomething(...); 
canvas.foobar(...); 

ここで、foobarは、doSomethingが呼び出されたキャンバスのインスタンスにのみアクセスできます。同時に、私はインスタンスに関する情報を持つ必要はありません。

+1

doSomethingを呼び出すと、このようにしてすべてのインスタンスがfoobarを持つことができます。 – Anoop

+2

'this.foobar'が設定されているかどうかを確認するためにチェックを追加することができます。そうすれば、彼らは 'doSomething'を呼び出すたびに、' this.foobar'を再設定しません。 – Ian

+0

ああ、ありがとう! – Sai

4

、あなたはdataプロパティを使用することができます。

//setting the function 
$('element').data('doSomething', function(arg) { ... }); 
//calling the function 
$('element').data('doSomething')(arg); 

JSFiddle

+0

doSomethingはうまくいきます。私は、別のメソッド/関数をアタッチできるようにしたい。しかし、私はどのオブジェクトに付いているのか必ずしも分かりません。私は "キャンバス"オブジェクトにアクセスすることはできません。 – Sai

+0

あなたの回答は正しくありませんでしたが、回答が私に役立ちました。投票しました! – Sai

+0

キャンバスオブジェクトに識別子を付けることも、特定のキャンバスの参照を保持することもできます。また、いつでもそのキャンバスにアクセスできます。任意の数のメソッドをオブジェクトに添付できます。 – Anoop

2

をアタッシュケースことができ、その場合には

関連する問題