Задать вопрос
omaxphp
@omaxphp
Выучиться не значит знать

Как создавать свои методы для элементов на JavaScript?

Допустим, есть элемент
id = document.getElementById('max').MyMethod(value); и мы применяем свой созданный метод, также может быть
div = document.getElementsByTagName('div')[0].MyMethod(value);

Как для Dom-узлов создавать свои методы - MyMethod(value)?
  • Вопрос задан
  • 3514 просмотров
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
miraage
@miraage
Старый прогер
По моему скромному мнению, модификация глобальных объектов - зло.
Лучше уж напишите свою функцию и передайте параметр.
Либо подмените контекст.
// Как хотите Вы
HTMLElement.prototype.MyMethod = function(value) {
    this.innerHTML += value;
};

// Вариант с параметром
function MyMethodA(elem, value) {
    elem.innerHTML += value;
}

// Вариант с подменой контекста
function MyMethodB(value) {
    this.innerHTML += value;
}

// not good
var a = document.getElementsByTagName('div')[0].MyMethod(value);
// better
var b = MyMethodA(document.getElementsByTagName('div')[0], value);
// probably what you need
var c = MyMethodB.call(document.getElementsByTagName('div')[0], value);
Ответ написан
mlnkv
@mlnkv
JavaScript Developer
var MyAPI = {
    css: function(key, val){
        if (val === undefined)
            return this[0].style[key];
        for (var i = 0; i < this.length; i++) {
            this[i].style[key] = val;
        }
        return this;
    },
    hide: function() {
        return this.css("display", "none");
    },
    show: function() {
        if (this.css("display") == "none")
            return this.css("display", "block");
        return this.css("display", "");
    }
}

function _el(selector) {
    var collection = document.querySelectorAll(selector),
        wrapped = [].slice.call(collection);
    for (var method in MyAPI) {
        wrapped[method] = MyAPI[method];
    }
    return wrapped;
}


_el("#mydiv").css("border", "1px solid black");
Ответ написан
ghaiklor
@ghaiklor
NodeJS TechLead
Смотря для каких узлов вы это хотите. Можно расширять прототип у HTMLCollection, NodeList, NodeElement и т.д. Вариант @JIakki не совсем корректен.
Ответ написан
@JIakki
Object.prototype.nameMetod = function () {.....};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы