Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2015, 12:04
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

прототип объекта
создание прототипа это лучше или хуже, если можно обходиться и без него? как дружит он с памятью? ну например, самый банальный пример:

// обычная функция
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
}


нуу суть вы поняли
какой из них лучше, быстрее, менее ресурсоёмкий и т д
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2015, 14:15
Кандидат Javascript-наук
Отправить личное сообщение для Brutus Посмотреть профиль Найти все сообщения от Brutus
 
Регистрация: 24.11.2013
Сообщений: 127

Разумеется процедурный вариант быстрее, но разницу в скорости трудно заметить и замерить, и ООП гораздо удобнее и понятнее и лучше конечно в данном случае юзать прототип, если тебя не заботит ie и старомобильные браузеры, jQuery и прочие работают с объектом оберткой, но как мне кажется это слишком грузно

Последний раз редактировалось Brutus, 13.04.2015 в 14:17.
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2015, 14:47
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

понятно, спасибо, а вот насколько старые? симбиан и прочее, или даже старые андроид и ios?

ие не заботит ниже 8 включительно
Ответить с цитированием
  #4 (permalink)  
Старый 13.04.2015, 14:49
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

jQuery и прочие по моему так делают для вызова методов по цепочке, а в чистом js если не ошибаюсь такого нет, только свойства идут цепочкой
Ответить с цитированием
  #5 (permalink)  
Старый 13.04.2015, 14:58
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Наложить своего кода в прототипы это плохо. Это грабли которые со временем стукнут по носу. Инкапсуляция и наследование это хорошо. Изменять стандартные или чужие объекты это плохо.
В данном случае когда расширяется HTMLelement это плохо для всех наследников этого объекта и далеко не всем наследникам нужно такое свойство.
Лучше создать свой объект в котором реализовать все нужные свойства и методы и добавить его в цепочку прототипов.
Ответить с цитированием
  #6 (permalink)  
Старый 13.04.2015, 15:00
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

хмм вот как, спасибо большое, благодарю
Ответить с цитированием
  #7 (permalink)  
Старый 13.04.2015, 15:08
Кандидат Javascript-наук
Отправить личное сообщение для Brutus Посмотреть профиль Найти все сообщения от Brutus
 
Регистрация: 24.11.2013
Сообщений: 127

Андроид любой тянет, а вот Opera Mini нет, да она уже и не нужна
Сообщение от Tecvid
jQuery и прочие по моему так делают для вызова методов по цепочке, а в чистом js если не ошибаюсь такого нет, только свойства идут цепочкой
Вот тебе простейший пример обертки
<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

Но не поддавайся соблазну

Последний раз редактировалось Brutus, 13.04.2015 в 15:14.
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2015, 15:18
Кандидат Javascript-наук
Отправить личное сообщение для Brutus Посмотреть профиль Найти все сообщения от Brutus
 
Регистрация: 24.11.2013
Сообщений: 127

MallSerg,
Но например в случае с функцией addClass это весьма удобно, и нужно почти всем наследникам
Ответить с цитированием
  #9 (permalink)  
Старый 13.04.2015, 15:20
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Сообщение от Brutus
Но не поддавайся соблазну
не поддамся
а ваш пример этот то что MallSerg сказал? если нет, то можно примерчик?
Сообщение от MallSerg
Лучше создать свой объект в котором реализовать все нужные свойства и методы и добавить его в цепочку прототипов.
Ответить с цитированием
  #10 (permalink)  
Старый 13.04.2015, 15:39
Кандидат Javascript-наук
Отправить личное сообщение для Brutus Посмотреть профиль Найти все сообщения от Brutus
 
Регистрация: 24.11.2013
Сообщений: 127

Tecvid,
Мой пример с конструктором или оберткой как в jQuery

Я пока не имею полное представление об объектной модели js я скорее C программист, и пока только учусь в свободное время (1-ый курс) и смысл фразы

"Лучше создать свой объект в котором реализовать все нужные свойства и методы и добавить его в цепочку прототипов." для меня не совсем понятен так что MallSerg если тебе не трудно объясни.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas. Как сделать или вообще нельзя? Вращение рандомизированно изменяемого объекта. Zemsky Общие вопросы Javascript 30 19.12.2013 19:44
динамическое обновление свойств объекта в цикле grego Общие вопросы Javascript 3 04.12.2013 23:29
Понимание ООП в JavaScript kefi Общие вопросы Javascript 160 25.09.2012 21:30
Скрипт вычисления координат объекта banderasantonio197555 Events/DOM/Window 4 16.08.2011 17:37
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00