最近、JavaScript を使用すると、オブジェクトまたは配列をキーとしてオブジェクト パラメーターに渡すことができることに気づきました。元:
var myType = { 'Name':'MyType' };
var myObject = {};
myObject[myType] = 1;
これを
さらに調べてみると、内部的にオブジェクトのメソッドが呼び出され、実際のキーとして渡されているようmyObject[myType];
です。上記の例では、実際に起こっていることが設定されていることを意味するため、これは実際にバラバラになります。つまり、渡された標準オブジェクトはすべて同じキーにアクセスします。1
.toString()
myObject['[object Object]']
.toString()
しかし、メソッドが代わりにコンストラクターを返すカスタム オブジェクトを作成することで、これを拡張することにしました。これは、オブジェクト タイプごとに一意のキーを返すことを意味します。これに基づいて、この手法を使用して型パラメーターの比較的クリーンな実装を作成する次の例を作成しました。
function Cat() {}
function Dog() {}
function AnimalPack() {
this.speech = "";
this.size = 0;
}
AnimalPack[Cat] = function() {
var pack = new AnimalPack();
pack.speech = "mew";
pack.size = 2;
return pack;
}
AnimalPack[Dog] = function() {
var pack = new AnimalPack();
pack.speech = "bark";
pack.size = 4;
return pack;
}
AnimalPack.prototype.Speak = function() {
var speak = [];
for(var i=0; i<this.size; i++) {
speak.push(this.speech);
}
return speak.join(" ");
}
var catparty = new AnimalPack[Cat]();
var dogparty = new AnimalPack[Dog]();
この例では、catparty.Speak()
が返さ'mew mew'
れ、dogparty.Speak()
が返され'bark bark bark bark'
ます。
これは、ネイティブ JavaScript タイプ (文字列、数値など) でも使用できます。
これは、5 つの主要なブラウザー (chrome、firefox、つまり safari、opera) のすべてで標準的に機能するようです。
この手法に見られない明らかな欠陥があるのか 、それともこれがおそらく型パラメーターを実装する有効な方法なのか疑問に思っていましたか?
ありがとう!