Предположим, что я намерен реализовать функциональность рандомизации, например:Как реализовать общий набор рандомизатора?
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
который по существу является объектом lorem
по вызову getRandomElement
? Могу ли я что-то сделать с объектом arguments
, прежде чем звонить apply
, чтобы избавиться от его самого первого элемента и передать аргументы после этого?
Никогда не назначать опытные образцы внутри функции. Сделайте это один раз максимум. А для отечественных прототипов лучше всего этого не делать. – Bergi
@Bergi, эта функция должна была называться один раз максимум. И я явно хочу включить эти функции рандомизации для любых объектов, массивов или функций. –
Тогда не помещайте его в функцию, если вы вызываете ее только один раз. Если вы хотите сделать это для структурирования кода, введите код в модуль или IEFE. – Bergi