прототип объекта
создание прототипа это лучше или хуже, если можно обходиться и без него? как дружит он с памятью? ну например, самый банальный пример:
// обычная функция
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, время: 03:05. |