Object.prototype в JavaScript - PullRequest
       23

Object.prototype в JavaScript

6 голосов
/ 18 ноября 2010

У меня есть некоторый код JavaScript, который определяет функцию getElementsByAttribute следующим образом:

Object.prototype.getElementsByAttribute = function(attr) {
    var children = this.all || this.getElementsByTagName('*'),
        ret = [], i, c;
        for( i=0; i<children.length; i++) {
            c = children[i].getAttribute(attr);
            if( typeof c == "string" && c != "")
                ret.push(children[i]);
        }
    return ret;
}

Это работает во всех браузерах, в которых я тестировал, кроме Internet Explorer 7 (и предположительно ниже) - эти браузеры выдают «Объект не поддерживает это свойство или метод».
Единственное, что я могу думать о том, что это не нравится, это то, что Объекты уже были созданы, когда я определил функцию-прототип ...
Чтобы определить функцию как ... ну, "нормальную" функцию и передать элемент в качестве аргумента, есть ли способ заставить это работать в IE7 и ниже?

Ответы [ 2 ]

6 голосов
/ 18 ноября 2010

IE DOM элементы не являются обычными объектами Javascript и не наследуют прототипы, как вы ожидаете.

http://perfectionkills.com/whats-wrong-with-extending-the-dom/

1 голос
/ 18 ноября 2010

Добавление вещей в Object.prototype - это действительно плохая идея.Он будет добавлен к каждому объекту, и это гарантирует непреднамеренное поведение, я гарантирую это.

Просто определите свою функцию и украсьте ее для любых объектов, которые вам нужны динамически.

...