#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? Если да, то почему?