2012-01-25 3 views
2

Я пытаюсь создать простой прототип в JavaScript, который удаляет символ из строки (например, полосы Python). Это вполне может существовать уже в JavaScript, но я не могу его найти, и для меня это больше упражнение, чем замена того, что уже существует.Создание прототипа JavaScript

function strip(chars) { 
    this.replace(chars,""); 
} 

String.prototype.strip=strip; 

var wrong = "Hellow"; 

alert(wrong.strip("w")); 

Когда я запускаю этот код, предупреждение сообщает «Не определено». Мое подозрение - this. в функции, но не уверен. Я также сделал скрипку здесь: http://jsfiddle.net/jdb1991/rapxM/

Благодарности

ответ

5

Вы должны указать return, так что результат операции возвращается:

function strip(chars) { 
    return this.replace(chars,""); 
} 

Работа демо: http://jsfiddle.net/rapxM/1/

Обратите внимание, что ваш код не удаляет все символы, он удаляет только . Если вы хотите, чтобы удалить все символы, используйте:

function strip(chars) { 
    return this.split(chars).join(''); 
} 
  • .split разбивает строку на мелкие кусочки, на основе данного аргумента (возвращается значение: массив).
  • .join() является метод массива, который присоединяет массива (возвращаемое значение: строка)
+0

Спасибо! Я знал об одном случае, просто хотел, чтобы прототипы работали. +1, например, и будет задан как ответ, когда я нажму на таймер. – jdborg

+0

Просто обратите внимание, что 'strip' Python не удаляет вхождения из середины строки (http://docs.python.org/library/stdtypes.html#str.strip). Не знаю, чего хочет @jdborg. –

+0

Если он хочет подражать методу 'strip' Python, он может либо переключиться на регулярное выражение, либо обрезать символы в двух циклах. –

0

Если вы хотите иметь такое же поведение, как в Python strip, вы должны удалить только символы из начала и конца строки , Вот решение с регулярными выражениями, которые выполняет это:

function strip(chars, wholeString) { 
    if (wholeString) 
     chars = "(" + chars + ")*"; 
    else 
     chars = "[" + chars + "]*"; 
    var pattern = "^" + chars + "|" + chars + "$"; 
    return this.replace(new RegExp(pattern, "g"),""); 
} 

Если wholeString установлен в true, он будет относиться к chars как блок символов, которые должны произойти вместе (ваш вопрос, казалось, спросить, что), в то время как если не установлен (по умолчанию), каждый символ в chars будет удален сам (как в Python). Используйте его так:

String.prototype.strip=strip; 

var str = "ababccabcccbbab"; 
document.write(str.strip("ab"));  // -> "ccabccc" 
document.write(str.strip("ab", true)); // -> "ccabcccbb" 

Обратите внимание, что ab не удаляется с середины str. При первом вызове a и b обрабатываются отдельно, поэтому bb также разделяется.

Смежные вопросы