0

私が書いているJSスクリプトに対して非常に奇妙な応答があります。私はJSに少し慣れていないので、既存のクラス(この場合は配列)を変更することについてはあまり知りません。

私はこれを適切に行っていることを願っていますが、これが私が実行しようとしているコードのJSFiddlesです(かなり抽象化されていますが、関連するすべての部分が含まれていると思います)

http://jsfiddle.net/UMHn5/

問題は、Arrayクラスを正しく変更する方法がわからないことだと思います。これは、Array.prototypeの「削除」変更を削除すると、別のエラーが発生するためです(配列には削除機能がありません)。 。

私が得ている例外は次のとおりです。

`Uncaught TypeError: Object function (from, to) {
var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
} has no method 'shift'`
4

3 に答える 3

3

のメンバーをループしているときはstrokes、キー01を取得しています"remove"。取得した3番目のキーstrokes["remove"](と同じstrokes.remove)を使用するremoveと、配列のプロトタイプに追加したメソッドが返され、そのエラーが発生します。

配列のメンバーではなく、配列のインデックスをループします。

for (var i = 0; i < strokes.length; i++) {
  strokes[i].shift(.05);
}
于 2012-11-07T08:53:55.470 に答える
1

では、 「remove」for (sn in strokes)に割り当てるとエラーが発生します。の値は、ストロークインスタンスではなく配列に追加する関数です。snstrokes[sn]

への変更

for (var i = 0; i < strokes.length; i++) {
  strokes[i].shift(.05);
}

または最初にタイプをテストします

if (typeof strokes[sn] != 'function') {
  ...
}
于 2012-11-07T08:50:07.700 に答える
0

これを試して:

for (var i = 0; i < strokes.length; i++) {
    strokes[i].shift(.05); //Where I'm getting the error
}

jsFiddle: http: //jsfiddle.net/UMHn5/2/

プロトタイプをフィドルに含めていません。

于 2012-11-07T08:39:08.983 に答える