2013-04-24 3 views
0

Сегодня говорил с разработчиком, и он сказал, что можно использовать строковый литерал, подобный этому, с использованием прототипа. Может ли кто-нибудь объяснить, как это возможно?"test" .reverse() Возможно ли это?

var myVar = "some string literal".reverse(); 
alert(myVar); 

и мне нужно будет реализовать некоторый обратный метод для получения предупреждающего вывода («буквальная строка»);

(не ищет алгоритма, так как я могу работать на строковый литерал, как это)

+5

http://stackoverflow.com/a/1611447/139010 –

+0

Вы заботитесь о сохранении пространства между словами, например, если изначально было 3 пробела между «некоторыми» и «строками»? –

+0

'' некоторый строковый литерал .split (""). Reverse(). Join (""); ' –

ответ

4

Вы можете сделать свой собственный новый метод, который возвращает новую строку с символами обратными.

String.prototype.reverse = function() { 
    return this.split("").reverse().join(""); 
} 

Рабочий пример: http://jsfiddle.net/jfriend00/jXA2x/

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

Если вы хотите разделить и реверса по границам слов или некоторых других критериев, то вы можете настроить аргумент, передаваемый .split() согласно любой логике вы хотите использовать, а затем изменить .join() соответственно, чтобы соответствовать:

String.prototype.reverse = function() { 
    return this.split(/\b/).reverse().join(" "); 
} 
+0

Не уверен, что вопрос имеет отношение к неизменности вообще – zerkms

+1

PS: Также неплохо было бы упомянуть, что расширение базовых классов - это плохая практика. – zerkms

+1

В оригинальном вопросе говорится: «И мне нужно будет реализовать какой-то обратный метод, чтобы получить буквенную строку с предупреждающим выводом' 'буквальная строка some''", это разворот по пробелам, а не по всем символам. – zzzzBov

1

Не рекомендуется переопределять прототипы базовых типов, если вы не используете функции более старых браузеров (например, с Array.prototype.indexOf).

Это имело бы смысл, чтобы просто создать обратную функцию:

function reverse(str) { 
    return str.split(' ').reverse().join(' '); 
} 

Что можно было бы назвать:

reverse('some string literal'); 

и будет производить

'literal some string' 

Но если вы действительно должны сделать его доступным через точечную нотацию из любой строки, вы можете установить функцию на String.prototype:

String.prototype.reverse = function() { 
    return this.split(' ').reverse().join(' '); 
}; 

Этот специфический reverse метод сходного до Array.prototype.reverse. Добавление такой функции может быть легко понято другими разработчиками и привести к более сложному коду.