JavaScript. Подробное руководство, 6-е издание, стр. 112
<b> Function.prototype.bind = function(o /*, аргументы */) {</b><b> // Реализация метода bind...</b><b> };</b><b>}</b>Ниже приводятся несколько примеров расширения классов:
<b>// Вызывает функцию f в цикле, количество итераций равно самому числу;</b><b>// при этом функции каждый раз передается номер итерации </b><b>// Например, чтобы вывести "привет" 3 раза:</b><b>// var n = 3;</b><b>// n.times(function(n) { console.log(n + " привет"); });</b><b>Number.prototype.times = function(f, context) {</b><b> var n = Number(this);</b><b> for(var і = 0; і < n; i++) f.call(context, i);</b><b>};</b><b>// Определяет метод ES5 String.trim(), если он отсутствует.</b><b>// Этот метод удаляет пробельные символы в начале и в конце строки и возвращает ее. </b><b>String.prototype.trim = String.prototype.trim || function() {</b><b> if (!this) return this; // He изменять пустую строку</b><b> return this.replace(/^\s+|\s+$/g, ""); // Регулярное выражение</b><b>};</b><b>// Возвращает имя функции. Если функция имеет свойство name (нестандартное),</b><b>// возвращает его значение. Иначе преобразует функцию в строку и извлекает имя из нее.</b><b>// Для неименованных функций возвращает пустую строку.</b><b>Function.prototype.getName = function() {</b><b> return this.name || this.toString().match(/function\s*([^(]*)\(/)[1];</b><b>};</b>Методы можно также добавлять в
<b>Object, prototype</b><b>Object.prototype</b><b>for/in</b><b>Object.defineProperty()</b><b>Object, prototype</b>Возможность подобного расширения классов, определяемых средой выполнения (такой как веб-броузер), зависит от реализации самой среды. Во многих веб-броузерах, например, допускается добавлять методы в
<b>HTMLElement.prototype</b>9.5. Классы и типы
В главе 3 уже говорилось, что в языке JavaScript определяется небольшое количество типов:
<b>null, undefined</b><b>typeof</b><b>class</b><b>classof()</b><b>class</b><b>classof()</b>В следующих подразделах описываются три приема определения класса произвольного объекта: оператор
<b>instanceof</b><b>constructor</b>9.5.1. Оператор instanceof
Оператор
<b>instanceof</b><b>о instanceof с</b><b>true</b><b>с.prototype</b><b>о</b><b>с.prototype</b><b>true</b>Как отмечалось выше в этой главе, конструкторы выступают в качестве наружной вывески классов, а фундаментальная идентификация классов проводится прототипами. Несмотря на то что в операторе
<b>instanceof</b>Если необходимо проверить, входит ли некоторый определенный прототип в цепочку прототипов объекта без использования функции-конструктора, как промежуточного звена, можно воспользоваться методом
<b>isPrototypeOf()</b>