私たちは、私がこのように、ランダム化機能を実装する予定と仮定してみましょう:一般的なセットランダマイザを実装する方法は?
function Randomizer() {
//Get random member name of object
Object.prototype.getRandomKey = function() {
var keys = Object.keys(this);
return keys[Math.floor(Math.random() * keys.length)];
};
//Get random member value of object
Object.prototype.getRandomElement = function() {
return this[this.getRandomKey()];
};
//Get random index of array
Array.prototype.getRandomKey = function() {
return Math.floor(Math.random() * this.length);
};
//Get random element of array
Array.prototype.getRandomElement = function() {
return this[this.getRandomKey()];
};
//Get random return key of function result
Function.prototype.getRandomKey = function() {
var result = this.apply(this, arguments);
return result && result.getRandomKey();
};
//Get random return member of function result
Function.prototype.getRandomElement = function() {
var result = this.apply(this, arguments);
return result && result.getRandomElement(result.getRandomKey());
};
//Get random element name of what if supported
Randomizer.getRandomKey = function(what) {
if ((!what) || (["undefined", "number", "boolean"].indexOf(typeof what) >= 0)) {
//unsupported
} else if (typeof what !== "function") {
return what.getRandomKey(arguments);
} else {
return Randomizer.getRandomKey(what.apply(this, arguments));
}
};
//Get random element value of what if supported
Randomizer.getRandomElement = function(what) {
if ((!what) || (["undefined", "number", "boolean"].indexOf(typeof what) >= 0)) {
//unsupported
} else if (typeof what !== "function") {
return what.getRandomElement(arguments);
} else {
return Randomizer.getRandomElement(what.apply(this, arguments));
}
};
}
これは私がそれを初期化する方法である
Randomizer();
使用例
function lorem(b, a) {
return a.substring(1);
}
Randomizer.getRandomElement(lorem, "abcde");
私の質問はようです次のようになります。Randomizer.getRandomKey
とRandomizer.getRandomElement
を変更して、にb
パラメータを定義しないようにするにはどうすればよいですかは本来lorem
オブジェクトそのもので、getRandomElement
が呼び出されますか? arguments
オブジェクトで何かを行うことができますか?apply
を呼び出して、最初の要素を取り除き、その後に引数を渡しますか?
は今まで関数内のプロトタイプに割り当てないでください。それを最大で一回行います。ネイティブプロトタイプの場合は、まったくやってはいけません。 – Bergi
@Bergi、この関数はせいぜい一度呼び出すことを意図していました。そして、私は明示的に任意のオブジェクト、配列または関数のこれらのランダム化機能を有効にしたいと思います。 –
そして、それを一度だけ呼び出すと、関数に入れないでください。コードを構造化するために行う場合は、コードをモジュールまたはIEFEに入れます。 – Bergi