15

DOM 要素を変更して、そのプロトタイプに追加できます。たとえば、キャンバスだけに何かを追加したい場合は、次のようにします。

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

次に、キャンバス要素でこのアクションを実行できます。

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

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

doSomething 関数で次のことを試しました。

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

ただし、プロトタイプはここでは定義されていません。

4

4 に答える 4

12

Shusl は私が正しい答えを思い付くのを助けました。思ったより簡単でした。私の doSomething(args) 関数では、オブジェクト プロトタイプを変更しようとする代わりに、関数を直接アタッチしました。完全なソースコードは次のとおりです。

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

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

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

于 2012-09-29T21:59:15.283 に答える
7

その場合method、キャンバスオブジェクトに直接アタッチできます

var canvas = document.getElementById('canvasId');
canvas.doSomething= function() {...}; ///doSomething will only be available to this particular canvas.
canvas.doSomething(...);
于 2012-09-29T21:43:42.073 に答える
6

jQuery では、プロパティを使用できdataます。

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

JSFiddle

于 2012-09-29T21:48:36.640 に答える