アレイプロトタイプに比較メソッドが追加されたため、テストが失敗しました。コードまたはテストを更新するにはどうすればよいですか?

ltrainpr

私は火星探査車カタに飛び込んでいます。私は興味深い問題に直面しています。プロトタイプの配列比較メソッドが原因で、ジャスミンテストが失敗します。配列比較メソッドを使用して、指定した座標またはグリッドポイントで障害物を検出しています。

例として、私の最初のテストでは次のエラーが発生します。[0、1、 'N'、undefined]が[0、1、 'N']に等しいと予想されます。

配列をconsole.logにすると、[0、1、 "N"、compare:function]が表示されます。これは、それが[0、1、 'N']と等しくない理由を説明しています。

私の配列の長さは3で、protoにはcompareメソッドがあります。この問題について何ができますか?

これがブランチ/コードです。これがテストです。

更新:

条件の1つがundefinedを返していたため、undefinedが配列にプッシュされるというエラーが発生していましたが、@ GameAlchemistソリューションを試さなければ、definePropertyについて学習したり、問題を理解したりすることはできませんでした。

さらに、私が読んだことから、組み込みのプロトタイプにプロパティを追加してObject.defineProperty()や同様のメソッドを使用し、それらを列挙できないようにすることをお勧めします。これにより、レガシーコードのfor-inループが壊れるのを防ぐことができます。

GameAlchemist

Object.definePropertyを使用して、プロトタイプのプロパティ/メソッドを列挙不可として設定することにより、非表示にすることができます。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

したがって、比較を定義するのがあなたである場合は、次のようにします。

Object.defineProperty(Array.prototype, 'compare', { value : compareFunction } );

構成可能、列挙可能、および書き込み可能はデフォルトでfalseであるため、読み取り専用、構成不可能、および列挙不可能なプロパティがあります。これは、比較の邪魔になりません。

比較を定義しているのがあなたでない場合は、それがまだ構成可能であることを期待する必要があります(Object。getOwnPropertyDescriptorを参照するか、次のコードをテストしてください)。

Object.defineProperty(Array.prototype, 'compare', { value : Array.prototype.compare } );

同様に、すべての配列プロトタイプでループを実行して、それ自体のすべてのプロパティが列挙可能かどうかを確認し、列挙可能である場合は非列挙可能に設定できます。

http://jsbin.com/zunahebo/2/edit?js,console

Object.defineProperty(Array.prototype, 'compare', { value : compareArray } );
function compareArray(other) {
  if (!other || other.length != this.length) return false;
  for (var i=0; i<this.length; i++) if (this[i] !== other[i]) return false;
  return true;
}

var a1 = [1, 2, 3, 4];
var a2 = [1, 2, 3, 4];
var a3 = [1, 2, 5, 6];
var a4 = [1, 2];

console.log(' a1 == a2 : ' + a1.compare(a2));
console.log(' a1 == a3 : ' + a1.compare(a3));
console.log(' a1 == a4 : ' + a1.compare(a4));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ