Javascript.RU

Array, String, Number, Function, Object#DOM, prototypes functions - Расширяем возможности встроенных объектов.

** Enchants Version List
 * Array:    1.1
 * String:   1.02
 * Number:   1.1
 * Function: 1.01
 * DOM:      1.0
 * Class:    John Resig
** JavaScript "Array" object functionnaly enchant library
 * Includes:
 *  Bool    Array().contains( Mixed needle [, String needle_key] );
 *  Bool    Array().forEach( Function callback );
 *  Bool    Array().every( Function callback );
 *  Bool    Array().some( Function callback );
 *  Array   Array().filter( Function callback );
 *  Array   Array().map( Function callback );
 *  Bool    Array().dumpKey( String key );
 *  String  Array().dump( void );
 *  void    Array().alert( void );
 *  Array   Array().keyCase( [Boolean upperCase = false] );
 *  Array   Array().chunk( Number size [, Boolean preserveKeys = false] );
 *  Array   Array().combine( Array _array [, Boolean arrayKeys = false] );
 *  Array   Array().countValues( void );
 *  Array   Array().diff( Array _array [, Boolean strict = false] );
 *  Array   Array().fill( [Number start = 0],[Number count = Start], Mixed val );
 *  Array   Array().fillKeys( Array keys, Mixed val );
 *  Array   Array().flip( void );
 *  Array   Array().unique( void );
 *  Bool    Array().keyExists( String key );
 *  String  Array().search( Mixed needle );
 *  Self    Array().empty( void );
 *
 *
** JavaScript "String" object functionnaly enchant library
 * Includes:
 *  String  String().addcslashes( String charlist );
 *  String  String().addslashes( void );
 *  String  String().bin2hex( [String separator = ''] );
 *  String  String().dump( void );
 *  String  String().ltrim( void );
 *  String  String().rtrim( void );
 *  String  String().trim( void );
 *  String  String().random( [Number length = rand(1,64) [, String charlist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"]] );
 *  Number  String().hexToDec( [Boolean unsigned = false] );
 *
 *
** JavaScript "Number" object functionnaly enchant library
 * Includes:
 *  Number  Number().random( Number min_or_max [, Number max] );
 *  Number  Number().module( void );
 *  Boolean Number().isNegative( void );
 *  Number  Number().floor( void );
 *  Number  Number().ceil( void );
 *  Number  Number().round( void );
 *  Number  Number().sqrt( void );
 *  Number  Number().pow( Number expanent );
 *  Number  Number().length( [Boolean negativeSymbolIncludes = false] );
 *  String  Number().toHex( [Number length = 8] );
 *  String  Number().float( Number length [, String type = round] );
 *  String  Number().px();
 *
 *
** JavaScript "Function" object functionnaly enchant library
 * Includes:
 *  Func    Function().bind( [Mixed scope] );
 *  Func    Function().checker( Array arguments_types [, Number arguments_min] );
 *
 * Changelog:
 *  [1.01]
 *  Syntax reformatted.
 *  [1.0]
 *  First release.
 *
 *
********************************************************************
 * JavaScript "DOM" object functionnaly enchant library
 * Includes:
 *  String  Func CSS2JS( String name );
 *  Func    ___EventListener( [Object DOM] element );
 *  Number  [Object DOM].addEvent( String name, Callback proc );
 *  Number  [Object DOM].remEvent( String name [, Number id] );
 *  Boolean document.ready( Mixed proc [, Mixed args [, Mixed scope]] );
 *  Mixed   [Object DOMElement].css( Mixed cssNameData, Mixed cssData );
 *  Element [Object DOMElement].findById( String id );
 *  Element [Object DOMElement].findByClass( String className );
 *  Element [Object DOMElement].findByName( String name );
 *  Element [Object DOMElement].findByTagName( String tagName );
 *  Element [Object DOMElement].find( String query );
 *  Array   [Object DOMElement].findAllByClass( String className );
 *  Array   [Object DOMElement].findAllByTagName( String tagName );
 *  Array   [Object DOMElement].findAll( String query );
 *
 *
** JavaScript "Class" constructor and inheritance
 * Includes:
 *  Class   Class.extend( Object classData );
 *  | __constructor - Class constructor;
 *  | __construct   - Class initialization procedure.
 *  | _parent       - Call method of parental class.
 *
 *
*/
Прикрепленный файлРазмер
array.js_.txt14.29 кб
function.js_.txt3.9 кб
dom.js_.txt20.05 кб
class.js_.txt1.96 кб
number.js_.txt6.39 кб
string.js_.txt10 кб
-1

Автор: hogart, дата: 28 апреля, 2011 - 11:03
#permalink

Что такое Array().alert?


Автор: RabiatoR, дата: 28 апреля, 2011 - 22:17
#permalink

это вызов метода alert(), для дампа массива, используется мной для отладки)


Автор: hogart, дата: 29 апреля, 2011 - 10:37
#permalink

window.alert неявно вызывает метод toString у аргумента. toString у массива — это, фактически, Array.join(). Он по дефолту выдает вполне читабельное представление. Зачем вам этот метод-то?


Автор: RabiatoR, дата: 29 апреля, 2011 - 11:50
#permalink

Он выдает не совсем вполне читабельное представление, ввиду отсутствия рекурсии. И я собираюсь объединить всё это в одно, где дамп будет у всех объектов, включая DOM и классы. Так-что я считаю что это вполне оправданное действие.


Автор: hogart, дата: 29 апреля, 2011 - 16:52
#permalink

console.dir?


Автор: Гость (не зарегистрирован), дата: 28 апреля, 2011 - 11:32
#permalink

Расширение функциональности стандартных объектов является моветоном


Автор: Sweet, дата: 28 апреля, 2011 - 18:48
#permalink

Не "является", а "некоторыми считается".


Автор: RabiatoR, дата: 28 апреля, 2011 - 22:17
#permalink

Если это является моветоном, то объясни что мне делать, старые браузеры не поддерживают метод bind у объекта Function, может мне теперь его не использовать для совместимости?


Автор: Гость (не зарегистрирован), дата: 28 апреля, 2011 - 23:14
#permalink

call, apply


Автор: RabiatoR, дата: 28 апреля, 2011 - 23:45
#permalink

Т.е. вы предлагаете не использовать новые возможности javascript.
Тогда может быть вы откроете протест против обновления функциональности данного языка? Вас пугает что-то новое? почему моветон!, раз реализовали прототип то хотели чтоб его использовали, если вам он не нравится то не используйте, я же предпочитаю не отрываться от развития новых технологий а идти в ногу со временем, даже если это предполагает написание функций прототипа для поддержки совместимости.


Автор: I-zone, дата: 29 апреля, 2011 - 14:47
#permalink

Записывание свойств в .prototype ни сколько не современней всех остальных способов. Бывают случаи, когда не следует соваться в прототипы объектов. В любом случае, любую операцию можно совершить без использования прототипов. Например jQuery не влезает не в один прототип объекта, хотя имеет функцию .bind к примеру. За счет этого - она по настоящему безконфликтная библиотека. Не следует соваться в прототип, без крайней необходимости.
P.S. Особенно насмешла фраза 'в ногу со временем'. Прототипы были даны классам с первой версии языка. Прописывание свойств в прототип грозит вам: плохой читаемостью, плохой ужинаеностью кода, медленностью инициализации, конфликты (например в javascript 1.4 появился метод .trim, а у массивов .forEach, их перезаписывание приведет к конфликтам или медленной работе самописной функции, по сравнению с нативной. ) Можно продолжить, но я думаю и этого хватает. Надеюсь теперь понятно, почему это моветон?


Автор: RabiatoR, дата: 30 апреля, 2011 - 02:08
#permalink

Сначала на код посмотри потом говори.
Во первых функции не перезаписоваются если они уже есть. во вторых я знаю что прототип с самого начала есть,но в старых браузерах нету forEach, И т.д., если их нету они добавляются.


Автор: I-zone, дата: 29 апреля, 2011 - 15:03
#permalink

И вообще, какого года эти функции. Они уже давно морально устарели. И причем тут Джон Резиг? Разве что это его старая работа. В его библиотеке jQuery функция trim выполнена совсем по другому. А эта вообще откровенно 'ламерски' написана, не будет работать в некоторых случаях, не корректно работает с не разрывными пробелами в ие, и медленнее аналогичной в jQuery в 2 раза. То же касается и остальных функций. Да уж, современные решения... Скорее старинный хлам.


Автор: RabiatoR, дата: 30 апреля, 2011 - 02:22
#permalink

Тест скорости для функции trim.
" Hello world!\t\t \t \r\n".trim();
725.8 ms
742.2 ms
700.4 ms

jQuery.trim(" Hello world!\t\t \t \r\n");
904.3 ms
867.0 ms
928.1 ms

Повтори что ты там сказал? Сначала докажите свою точку зрения, перед тем как писать её!


Автор: RabiatoR, дата: 30 апреля, 2011 - 02:24
#permalink

реализация Class Inheritance взята у John Resig. Ты бы читал перед тем как комментировать...


Автор: RabiatoR, дата: 30 апреля, 2011 - 02:26
#permalink
/*[. А эта вообще откровенно 'ламерски' написана, не будет работать в некоторых случаях, не корректно работает с не разрывными пробелами в ие]*/

с каких пор ie некорректно интерпретирует регулярные выражения?


Автор: Яростный Меч, дата: 9 июня, 2011 - 17:43
#permalink

расширение Object.prototype - да, т.к. for..in теперь обязательно потребует hasOwnProperty, и забывание оного чревато багами.
А насчет других классов - спорно.


Автор: poorking, дата: 30 апреля, 2011 - 05:56
#permalink
// Use native String.trim function wherever possible
	trim: trim ?
		function( text ) {
			return text == null ?
				"" :
				trim.call( text );
		} :

		// Otherwise use our own trimming functionality
		function( text ) {
			return text == null ?
				"" :
				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
		},

Кусок из JQuery, всегда так делают как RabiatoR сказал, свойства прототипа стандартных классов подменяются только если их там еще нет. Я думаю то у RabiatoR трим быстрее потому что одна замена а не две (читай replace вызывается 1 раз)
а про неразрывные пробелы I-zone прав, в ie6 надо [\s|\xA0]


Автор: RabiatoR, дата: 30 апреля, 2011 - 09:32
#permalink

Добавил удаление \xA0,
Провел тест скорости и получил:
757.3
733.4
734.1


Автор: ixth, дата: 15 мая, 2011 - 11:56
#permalink

Касательно двух замен вместо одной и вообще быстродействия трима и регулярок:
http://blog.stevenlevithan.com/archives/faster-trim-javascript


Автор: I-zone, дата: 30 апреля, 2011 - 13:48
#permalink

Учись проверять в разных браузерах. В опере вызов двух replace получается быстрее в win32, при длинной строке так же наблюдается выигрыш в firefox, одно 'или' в регэкспе притормаживает браузеры, у которых с логикой проблемы. Это не касается хрома и ие. Про проверку свойства имел ввиду частые ошибки, которые встречал в коде новичков. Всё, что можно реализовать в прототипе, можно реализовать и отдельными функциями, которые получаются куда более универсальными. Так же в jQuery trim не много медленнее, из за проверки на null и undefined, которые в вашей функции выкинут исключение. Часто строковые ключи, особенно в dom представленны объектом null. Ваш тест на одну строку фиксированной длины и под один браузер - не объективен. В своё время съел пуд соли с прототипами и функциями trim. В интернете, есть 6 функций trim, под разные случаи. Усредненные показатели лучше всего у двух replace, о чем например у Резига есть очень познавательная статья. Это показывают и мои тесты на трех разных машинах и со всеми браузерами. Не считайте всех глупцами на этом форуме, а изначально уважительно бы отнеслись к полезной информации для размышлений.


Автор: RabiatoR, дата: 30 апреля, 2011 - 14:28
#permalink

Если бы ты сразу так написал то отнесся бы уважительней, проверяю обычно в разных, времени небыло, но на 1 платформе 1 XP x86.
Проверка на null и undefined меня не интересует, пишу в первую очередь для себя, а не для общества.


Автор: ixth, дата: 15 мая, 2011 - 12:13
#permalink

"Каждый может написать свой js-фреймворк, но не каждый может удержаться от того, чтобы его использовать." (c) Subzey


Автор: Яростный Меч, дата: 9 июня, 2011 - 17:39
#permalink

стандартный Function.bind позволяет забиндить не только this, но и первые несколько аргументов


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 - 06:09
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 02:34
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 12:14
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
5 + 14 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
RabiatoR
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum