私はこれに慣れていないので、できるだけ詳しく説明しようと思います。
関数を使用してJSクラスを作成しています。
function Bandstar(p, id)
{
var numberOfSides, Xcenter, Ycenter;
var canvas;
var circlesInt;
var linesInt;
var lines;
var linesInt2;
var linesMidToEdge;
.....
メソッドに関しては、次のように宣言します。
this.IAset = function(a)
{
for (var i =0; i<= this.numberOfSides-1;i++)
{
if (parseInt(a[i]) == a[i])
this.circles[i].value = a[i];
else
return false;
}
this.IArepaint();
return true
}
それだけです。
ここでの問題は、特定のメソッドを作成しているときに、次のことです。
this.moveFunc = function(e)
{
var p = e.target;
this.IAmove(p);
};
メソッドIAmove
は次のように宣言されています。
this.IAmove = function(p)
{
var m = (p.oTop - this.Ycenter ) / (p.oLeft - this.Xcenter);
var linea = m * ( p.left - p.oLeft) + p.oTop;
var ejeX = p.left;
...
}
コンパイラはこのエラーをスローし続けます:
Uncaught TypeError: Object function (e) { var p = e.target; this.IAmove(p); } has no method 'IAmove'
つまり、moveFunc
関数として宣言しているのですが、プロパティを使用しようとするとthis
、実際にはその上のクラスのインスタンス()は使用されませんがBandstar
、それ自体は使用されます(明らかにmoveFunc
と呼ばれるメソッドIAmove
、それが作成されているクラスは)..。
これはうまくいったようだと思いましたが、JSの遺産とクラスの形態の概念を正しく理解していないはずです。
同じクラス内の別のメソッドからクラス内のメソッドにアクセスするにはどうすればよいですか?私が書いIAmove(p)
ただけでは、メソッドIAmove()
は未定義であるとだけ表示されます(定義されていないため、Bandstar名前空間の一部です。
私はそれが私が見ていない何か愚かなものでなければならないことを知っています。助言がありますか?