прототип объекта
создание прототипа это лучше или хуже, если можно обходиться и без него? как дружит он с памятью? ну например, самый банальный пример:
// обычная функция function doSmth(elem, argument) { // if (elem bla bla) return argument bla bla } // и прототип HTMLElement.prototype.doSmth = function (argument) { // if (this bla bla) return argument bla bla } нуу суть вы поняли :) какой из них лучше, быстрее, менее ресурсоёмкий и т д :) |
Разумеется процедурный вариант быстрее, но разницу в скорости трудно заметить и замерить, и ООП гораздо удобнее и понятнее и лучше конечно в данном случае юзать прототип, если тебя не заботит ie и старомобильные браузеры, jQuery и прочие работают с объектом оберткой, но как мне кажется это слишком грузно
|
понятно, спасибо, а вот насколько старые? симбиан и прочее, или даже старые андроид и ios?
ие не заботит ниже 8 включительно :) |
jQuery и прочие по моему так делают для вызова методов по цепочке, а в чистом js если не ошибаюсь такого нет, только свойства идут цепочкой
|
Наложить своего кода в прототипы это плохо. Это грабли которые со временем стукнут по носу. Инкапсуляция и наследование это хорошо. Изменять стандартные или чужие объекты это плохо.
В данном случае когда расширяется HTMLelement это плохо для всех наследников этого объекта и далеко не всем наследникам нужно такое свойство. Лучше создать свой объект в котором реализовать все нужные свойства и методы и добавить его в цепочку прототипов. |
хмм вот как, спасибо большое, благодарю
|
Андроид любой тянет, а вот Opera Mini нет, да она уже и не нужна
Цитата:
<html> <head> <script> function Dollar (elem) { return new ELEMENT(elem); } function ELEMENT(element) { this.element = element; } ELEMENT.prototype = { hasClass : function (className) { return new RegExp('(\\s|^)'+className+'(\\s|$)').test(this.element.className); }, addClass : function (className) { if (!this.hasClass(className)) this.element.className += (this.element.className ? ' ' : '') +className; return this; }, removeClass : function (className) { if (this.hasClass(className)) this.element.className=this.element.className.replace(new RegExp('(\\s|^)'+className+'(\\s|$)'),' ').replace(/^\s+|\s+$/g, ''); return this; }, } </script> </head> <body> <script> Dollar(document.body).addClass('xbody'); Dollar(document.body).removeClass('xbody'); Dollar(document.body).addClass('xybody'); alert(document.body.className+' '+Dollar(document.body).hasClass('xybody')); </script> </body> </html> Здесь обертка это функция ELEMENT Но не поддавайся соблазну ;) |
MallSerg,
Но например в случае с функцией addClass это весьма удобно, и нужно почти всем наследникам |
Цитата:
а ваш пример этот то что MallSerg сказал? если нет, то можно примерчик? :) Цитата:
|
Tecvid,
Мой пример с конструктором или оберткой как в jQuery Я пока не имею полное представление об объектной модели js я скорее C программист, и пока только учусь в свободное время (1-ый курс) и смысл фразы "Лучше создать свой объект в котором реализовать все нужные свойства и методы и добавить его в цепочку прототипов." для меня не совсем понятен так что MallSerg если тебе не трудно объясни. |
Часовой пояс GMT +3, время: 02:41. |