Есть ли способ условно ссылаться на функцию, такую как .replace () в строке?

1

Оставаться в инструкции var, например:

var foo = 0, bar = "abc".replace("a", "x"); // want bar to equal "abc"
var foo = 1, bar = "abc".replace("a", "x"); // want bar to equal "xbc"

Только замените, если foo - 1. Что-то вроде:

var foo = 0, bar = "abc"[foo ? "replace" : "some noOp function"]("a", "x");

Вместо "replace" существует функция типа noOp, которая может использоваться для "некоторой функции noOp"? Я не хочу изменять какие-либо прототипы. Есть ли способ сделать это, используя существующие методы?

"abc" может быть в переменной, например:

var baz = "abc", foo = 0, bar = baz[foo ? "replace" : "some noOp function"]("a", "x")
  • 0
    Что бы вы ожидали, что bar будет равен, если foo был 0 ?
  • 0
    @Bryan Брайан Даунинг "ABC"
Показать ещё 3 комментария
Теги:

1 ответ

3
Лучший ответ

Для строки вы можете использовать метод toString/valueOf, который будет возвращать одну и ту же строку, и он не принимает аргументы, поэтому вы можете передавать все, что хотите, не беспокоясь.

function bar(foo) {
  return "abc"[foo ? "replace" : "toString"]("a", "x");
}

console.log(bar(true));
console.log(bar(false));

Во всяком случае, я не рекомендую это делать. Лучше не называть функцию, и я не считаю ее очень чистой.

  • 1
    Отлично. Это работает. Спасибо. Отметим как ответ. Согласитесь с вашим комментарием, но всегда бывают ситуации, когда ....:)
  • 0
    Да, я знаю, но чувствовал необходимость добавить комментарий для будущих читателей: P. И вы также можете использовать valueOf .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню