Add method to string class
I’d like to be able to say something like this in javascript :
How can I add my own distance function to the string class?
6 Answers 6
You can extend the String prototype;
. and use it like this;
Minimal example:
No ones mentioned valueOf.
From my research into it, there is no way to edit the string in place.
Even if you use a string object instead of a string primitive.
Below does NOT work and get’s really weird results in the debugger.
Могу ли я добавить публичную функцию к объектам в JavaScript? Как?
Я уверен, что сформулировал этот вопрос неправильно, но я не знаю, как его хорошо объяснить .
У меня есть смутное представление, которое я где-то читал, что я могу добавлять методы к объектам в JavaScript — я имею в виду что-то вроде
Это возможно? Если да, то как мне это сделать?
задан 02 июля ’09, 01:07
Два быстрых комментария: (1) Нет необходимости в String (this), вы знаете, что «this» — это String, поскольку вы находитесь в функции String.prototype; (2) Не добавляйте ничего в Object.prototype или Array.prototype. Если вы это сделаете, вы больше не сможете использовать синтаксис for (var item in array). — John Kugelman
@John Kugelman: Исправлено, спасибо. — MGOwen
Пожалуйста, не дополняйте свой вопрос собственным ответом. Если вы считаете, что нужен отдельный ответ, опубликуйте свой ответ ниже. — Duncan Jones
2 ответы
Присвойте ему так же, как это переменную. Тогда вы можете использовать this . Легкий!
Отлично работает . кроме! Э-э, за исключением струн, которые неуязвимы для этого дурачества. (Они полностью неизменяемы.) Однако есть другой способ — изменить «класс» объекта и добавить туда метод. И под «классом» я действительно имею в виду «прототип». JavaScript нет классов, у него есть прототипы. Синтаксис для изменения String прототип выглядит так:
Создан 02 июля ’09, 05:07
блестящий — именно то, что я искал. — MGOwen
Похоже, вы хотите использовать технику под названием исправление обезьяны. Эта статья содержит ссылку на Duck Punching JavaScript — Метапрограммирование с помощью прототипа который может вам помочь.
Создан 02 июля ’09, 05:07
Спасибо. Ваши связанные статьи не были такими краткими, как принятый ответ, но все же верны. — MGOwen
Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее чтобы включить сюда основные части ответа и предоставить ссылку для справки. — Дункан Джонс
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками javascript prototype-programming or задайте свой вопрос.
javascript: добавить метод в класс string
Я хотел бы иметь возможность сказать что-то подобное в javascript :
Как я могу добавить свою собственную функцию расстояния в класс string?
5 ответов
вы можете продлить String прототип;
. и используйте его так;
вы могли бы сделать это:
использование prototype для добавления собственной функции в строку называется прототипом я создал небольшой код JavaScript, который может выбирать элементы и изменять его innerHTML
минимальный пример:
никто не упомянул valueOf.
из моих исследований в нем нет способа отредактировать строку на месте.
даже если вы используете объект string вместо строкового примитива.
ниже не работает и получить очень странные результаты в отладчике.
Name already in use
Для того чтобы явно преобразовать значение в строку, можно воспользоваться функцией String().
Неявное преобразование вызывает использование обычного оператора сложения, +, с двумя операндами, если один из них является строкой:
Все примитивные типы преобразуются в строки вполне естественным и ожидаемым образом:
В случае с типом Symbol дело несколько усложняется, так как значения этого типа можно преобразовать к строковому типу только явно.
Преобразование к типу Boolean
Для того, чтобы явно преобразовать значение к логическому типу, используют функцию Boolean().
Неявное преобразование происходит в логическом контексте, или вызывается логическими операторами (|| && !).
Обратите внимание на то, что операторы, вроде || и && выполняют преобразование значений к логическому типу для внутренних целей, а возвращают значения исходных операндов, даже если они не являются логическими.
Так как при приведении значения к логическому типу возможны лишь два результата — true или false, легче всего освоить этот вид преобразований, запомнив те выражения, которые выдают false:
Преобразование к типу Number
Явное преобразование к числовому типу выполняется с помощью функции Number() — то есть по тому же принципу, который используется для типов Boolean и String.
Неявное приведение значения к типу Number выполняют следующие операторы:
- Операторы сравнения (>, <, <=, >=).
- Побитовые операторы (|, &, ^,
Вот как в числа преобразуются примитивные значения:
Значения типа Symbol не могут быть преобразованы в число ни явно, ни неявно
Вот правила, которые стоит запомнить:
Преобразование типов для объектов
Самое простое — это преобразование в логическое значение: любое значение, не являющееся примитивом, всегда true
Но что будет, если я приведу object к строке?
Для этого есть стандартные методы js — toString() и valueOf() :
. Обратите внимание на то, что person + » возвращает ‘1’ в виде строки. Оператор + вызывает стандартный режим преобразования. Как уже было сказано, Object рассматривает приведение к числу как преобразование по умолчанию, поэтому использует сначала метод valueOf() а не toString().

BigInt – это специальный числовой тип, который предоставляет возможность работать с целыми числами произвольной длины.
Чтобы создать значение типа BigInt, необходимо добавить n в конец числового литерала или вызвать функцию BigInt()
BigInt можно использовать как обычные числа, к примеру:
Но в математических операциях мы не можем смешивать bigint и обычные числа:
В JavaScript функция является особым типом объекта, который позволяет закладывать и применять определенную логику для обработки данных.
Синтааксис
Вызов функции JavaScript осуществляется по ее имени, за которым следуют круглые скобки с аргументами (если они имеются)
Именно круглые скобки говорят, что функцию необходимо выполнить.
- Давайте напишем функцию, которая будет выводить сумму чисел 1 и 5 в консоль
Рассмотрим пример c аргументами:
- name — аргумент функции sayHello
Аргументы передаем в вызов функции. Можно передевать любое кол-во аргументов.
В приведенном примере объявляется функция sayHello(), которая принимает три аргумента — name, lastName, age.
Давайте напишем функция, которая будет выводить в консоль сумму двух аргументов.
На объявление функции распространяется действие механизма всплытия.
Это значит, что в скрипте функция может быть вызвана до ее физического объявления.
Функции JavaScript также могут быть анонимными.
Анонимной называется функция без имени.
Такие функции используются в качестве callback-ов при обработке событий или присваиваются переменным, которые в дальнейшем передается другим функциями как параметры.
Функция передана в качестве аргумента:
Значения для аргументов можно устанавливать по умолчанию:
Если передать аргумент, то он перетрет значение по умолчанию.
Бывают случаи, когда необходимо, чтобы функция принимала заранее неизвестное количество аргументов.
В JavaScript это возможно сделать используя так называемые REST-аргументы.
Обратите внимание на синтаксис описания REST-аргументов при объявлении функции: они описываются как один аргумент, но с многоточием в начале.
Здесь многоточие является оператором расширения.
В теле функции значением аргумента является массив со всеми переданными значениями.
Допускается одновременное использование обычных и REST-параметров.
Также внутри каждой функции доступна для использования переменная arguments, которая содержит массив всех переданных функции параметров.
Ключевое слово return
Ключевое слово return является оператором JavaScript, который возвращает переданное ему значение и завершает выполнение функции.
Если не передать значение, то функция вернет undefined.
Весь код, следующий после использования оператора return, никогда не будет выполнен.
Зачем нужен return
Стрелочные функции JavaScript представляют собой анонимные функции с более удобным синтаксисом.
Синтаксис стрелочной функции JavaScript.
Пример с аргументами:
Если тело функции состоит из одной строки и при этом возвращает значение, то фигурные скобки и оператор return можно опустить.
Тоже самое что и:
Массив — это упорядоченная коллекция значений. Значения в массиве называются элементами, и каждый элемент характеризуется числовой позицией в массиве, которая называется индексом (индексы начинаются с нуля).
Массив может хранить в себе любые значения:
Другой способ создания массива состоит в вызове конструктора Array():
Чтение и запись элементов массива
Доступ к элементам массива осуществляется с помощью оператора [].
Слева от скобок должна присутствовать ссылка на массив.
Внутри скобок должно находиться произвольное выражение, возвращающее неотрицательное целое значение.
Этот синтаксис пригоден как для чтения, так и для записи значения элемента массива.
Следовательно, допустимы все приведенные далее JavaScript-инструкции:
Введение в методы и свойства
Методы JavaScript это действия, которые можно выполнить с объектами.
Метод JavaScript это свойство, содержащее определение функции.
Обращение к методам объекта
Так же можно использовать return и аргементы:
Строка JavaScript может рассматриваться как массив символов.
Использование встроенных методов строк
В JavaScript имеется широкий набор методов для работы со строками.
Рассмотрим наиболее популярные из них:
- split
Метод split разбивает строку на массив по заданному разделителю
- toUpperCase() / toLowerCase() — преобразование значения в верхний/нижний регистр;
- indexOf() — поиск заданного значения в строке; метод возвращает индекс первого найденного значения или же -1, если совпадений нет; поиск чувствителен к регистру
- slice() — возвращает часть строки по заданным начальному и конечному индексам; если передать отрицательные значения, то отсчет будет осуществляться с конца строки
- substring() — возвращает часть строки по заданным начальному и конечному индексам, не принимает отрицательных значений
- replace() — заменяет вхождения заданного значения (значение может быть регулярным выражением) на новое значение, указываемое вторым параметром
- trim() — удаление пробелов в начале и конце строки
Использование встроенных методов массива
- toString / join
Метод toString() возвращает массив в виде строки, в которой все его элементы перечислены через запятую.
Метод join() идентичен методу toString() и отличается от него лишь тем, что с его помощью можно задать разделитель, отличный от запятой (по умолчанию).
- unshift / push
В JavaScript методы unshift() и push() используются для добавления в массив новых элементов: unshift() добавляет элемент в начало, push() — в конец
- shift / pop
Методы shift() и pop() предназначены для удаления элементов из массива: shift() удаляет первый элемент, pop() — последний. Оба метода возвращают значение удаляемого элемента.
- concat / slice
Объединение массивов в JavaScript осуществляется с использованием метода concat(), а извлечение части массива в новый отдельный — с использованием метода slice()
Метод concat() принимает массив и возвращает новый объединенный массив, который является результатом объединения исходного массива (применительного к которому вызывается concat()) и массива, переданного в качестве параметра.
При этом значения исходных массивов не изменяются.
Метод slice() возвращает часть исходного массива как новый массив, не изменяя при этом исходный массив, и принимает два параметра:
- индекс элемента, который будет первым в результирующем массиве;
- индекс элемента, до которого все предыдущие элементы будут частью результирующего массива, но сам он в результирующий массив включен не будет (необязательный параметр).
- splice
Метод splice() позволяет изменять содержимое массива, добавляя в него новые элементы или же удаляя существующие. JavaScript splice() может принимать следующие параметры:
- индекс, относительно которого будет происходить изменение массива;
- количество элементов, которое необходимо удалить;
- элементы, которые необходимо добавить в массив (в виде REST-аргумента).
Возвращаемым значением splice() является массив удаленных элементов.
- forEach / map
Методы для перебора элементов в массиве. Разница между ними в том, то метод map возвращает новый массив, а forEach — нет.
- filter / sort
Фильтрация и сортировка массива в JavaScript осуществляется с использованием методов filter() и sort() соответственно.
Метод filter() возвращает новый массив элементов, которые удовлетворяет заданному переданной функцией условию, применяемой к кажому элементу.
Так, filter() принимает первым аргументом функцию, которая принимает в себя 3 аргумента — item (элемент массива), i (индекс элемента массива), arr (сам массив)
Давайте отфильтруем массив [1,2,3,4,5,6,7,8,9,10] и получим новый массив только из четных чисел.
Метод sort() сортирует элементы массива по возрастанию, причем порядок элементов меняется прямо в массиве.
Важно понимать, что сортировка осуществляется по символам и по значениям их кодов в таблице Unicode.
Например, сортировка массива чисел, в котором присутствуют двузначные числа, будет осуществляться сначала по первым символам, а потом уже по вторым.
Для сортировки именно по числовым значениям (или любым другим) методу sort() необходимо задать функцию сравнения, которая будет определять, какой из элементов больше.
Параметрами функции сравнении передаются два элемента массива, которые необходимо сравнить в данный момент.
Сама функция вызывается для всех пар элементов массива.
- find / some / every
Методы find(), some() и every() используются для проверки соответствия элементов массива некоторому условию и имеют одинаковый набор параметров
Методы принимают в себя функцию с 3 аргументами. Первый аргумент (item) — сам элемент массива, второй аргумент (i) — индекс элемента, arr — сам массив
Метод find() используется для поиска в массиве элемента, удовлетворяющего заданному критерию.
Возвращаемым результатом вызова JavaScript find() является первый попавшийся элемент, который подходит под заданное условие. Если таких элементов в массиве нет — возвращается undefined.
Метод some() позволяет узнать, имеется ли в массиве хотя бы один элемент, удовлетворяющий заданному функцией условию, и возвращает true, если такой элемент есть, и false в противном случае.
Метод every() возвращает true, если все элементы массив удовлетворяют заданному критерию или false в противном случае. Критерий задается функцией.
Есть массив [‘Капуста’, ‘Репа’, ‘Редиска’, ‘Морковка’]. Надо вывести в консоль строку ‘Капуста | Репа | Редиска | Морковка’;
Есть строка ‘Вася;Петя;Вова;Олег’. Используя стандартные методы строк получить массив их имен;
Напишите функцию hello2(), которая при вызове будет принимать переменную (в аргументы) name (например, «Василий») и выводить строку (в нашем случае «Привет, Василий»).
В случае отсутствующего аргумента выводить «Привет, гость»
Есть массив [‘яблоко’, ‘ананас’, ‘груша’]
Привести каждый элемент массива в верхний регистр (сделать все слово большими буквами) и получить результат (новый массив) в новую переменную.
Написать функцию addOneForAll, которая может принять неограниченное кол-во аргументов.
Добавить к каждому аргументу 1 и вернуть новый массив с новыми значениями.
передал в массив такие числа — 1, 2, 3, 4
функция добавляет к каждму числу + 1
функция возвращает новый массив, в котором новые значения
Написать функцию getSum, которая может принять неограниченное кол-во аргументов и возвращает их сумму.
Есть массив [1, ‘hello’, 2, 3, 4, ‘5’, ‘6’, 7, null]. Отфильтровать массив так, чтобы остались только числа. Сделать можно любым способом из того, что учили.
Написать функцию arrayTesting, которая принимает в себя любой массив (в аргументы)
функция проверяет есть ли в массиве хоть одно true значение
и если оно есть, то возвращаем из функции строку ‘Нашли true значение’, если его нет — ‘Ничего нет’