JS +キャンバスで実験しています。 私の最小限のアプリケーションの「目標」は、キャンバス上の任意の場所をクリックし、描画ボタンを押して、クリックした場所を四角で描画することです。javascript型の問題:未知の型エラー:オブジェクト0にメソッド 'draw'がありません
OOバックグラウンドから来ています...私はOOを使用しようとしました。これは、jsでは完全に把握できません。
が、基本的に私は、カスタムスクエアオブジェクトiの配列にユーザーがクリックするたびに追加
function Square(l, w, x, y) {
this.length = l;
this.width = w;
this.posx = x - l/2;
this.posy = y - w/2;
//test
//ctx.fillStyle = "rgb(20,0,0)";
//ctx.fillRect(this.posx,this.posy,this.length,this.width);
this.draw = function() {
ctx.fillStyle = "rgb(20,0,0)";
ctx.fillRect(this.posx,this.posy,this.length,this.width);
}
}
を持っている...ここ は私がキャンバス上をクリックしたときのイベントハンドラです。
function addTo(evt) {
pos = getMousePos(evt);
var sq = new Square(50, 50, pos.x, pos.y);
list.push(sq);
output.innerText = "("+sq.posx+","+sq.posy+")";
}
ここでは、四角形を描く場所です(試行)。私は、同様のエラーがそのオブジェクトの変数にアクセスしようとしてもらう
Uncaught TypeError: Object 0 has no method 'draw'
:
function renderStack() {
//alert(list);
canvas.width = canvas.width;
for(var o in list) o.draw();
}
が、これは誤りです。 リストに追加した後、jsはどのタイプのものなのか忘れてしまったようです。 - 配列を印刷すると[オブジェクトオブジェクト]がいっぱいです。
ありがとうございます。
トピックをオフにしますが、 'draw'メソッドをコンストラクタから取り出して、' prototype'に一度置きます。 'Square.prototype.draw = func ...' –
ありがとう、JSの新しい、特にオブジェクトのための良いリソース。私は矛盾するものをいくつか読んだ。 –