Я не могу расширить прототип строки в javascript

#javascript #prototype-programming

#javascript #прототип-программирование

Вопрос:

Вот код

 <script>

String.prototype.testthing = function() {
    return "working";
}

alert(String.testthing());

</script>
  

Когда я открываю эту страницу, я получаю сообщение об ошибке ниже

 Uncaught TypeError: Object function String() { [native code] } has no method 'testthing'
  

Я не могу понять, почему. Я расширил прототип массива без проблем.

Комментарии:

1. Ну, String !== String.prototype .

2. Ближе к делу (IMO), Object.getPrototypeOf(String) !== String.prototype .

Ответ №1:

Приведенный вами код правильно расширяет String прототип. Однако вы пытаетесь вызвать метод для функции с помощью String.testthing , а не для string экземпляра.

 alert("".testthing());  // "displays 'working'
  

Если вы действительно хотите вызывать методы из String конструкции, тогда вам нужно расширить прототип на Function

 Function.prototype.testthing = function () { 
  return "working";
}
alert(String.testthing());  
  

Комментарии:

1. Почему вы присваиваете Function.prototype , а не String.testthing = ... нет?

2. @clockworkgeek оба будут работать (но выдадут разные результаты). Я не был уверен в намерениях OP, но хотел продемонстрировать один из способов сделать это.

3. @JaredPar считается ли плохой практикой делать такую вещь, как String.prototype.customMethod? Если да, то почему?