Javascript: как создавать глобальные функции и переменные - PullRequest
8 голосов
/ 19 февраля 2011

Я хотел бы создать новую функцию, которую я могу использовать для элементов, например:

document.getElementById("element").myNewFunction();

Я не говорю об этом:

document.getElementById("element").myNewFunction = function(){
   doSomething...
}

Потому что это работаеттолько для этого элемента, но как мне создать глобальную функцию, которую я могу использовать для всех элементов, таких как те, которые встроены в JavaScript?

Ответы [ 5 ]

9 голосов
/ 19 февраля 2011

Используйте прототип Element для расширения его функциональности:

Element.prototype.myNewFunction = function() { 
      // your code...
};

Теперь вы можете вызывать этот метод для любого объекта элемента.

Редактировать: Я только что быстро проверил, и кажется, что это не будет работать для IE7 и ниже, и IE8 может быть сомнительным.

Редактировать 2: Также, как отмечает Илай, вероятно, не стоит расширять объекты, которые вам не принадлежат. Учитывая эту слабую поддержку IE, вы можете рассмотреть простую процедурную функцию:

function myFunction(element) {
  // your code...

  // which may or may not return an object or value
  return blah;
}
5 голосов
/ 19 февраля 2011

См. Этот вопрос: В Javascript вы можете расширить DOM? .

Хотя это возможно, обычно считается плохой практикой изменять функциональность объектов, которые вы не используете.т собственный.

1 голос
/ 19 февраля 2011

Например:

HTMLAnchorElement.prototype.click = function () {
    alert('HAI!');
};

document.links[0].click();

Определить правильный объект для расширения, запросив document.getElementById("element").constructor

1 голос
/ 19 февраля 2011

Попробуйте

Object.prototype.myNeweFunction=function(){
 doSomthing..
}
1 голос
/ 19 февраля 2011

Prototype (библиотека) делает это, расширяет собственный (встроенный) класс DomElement, добавляя методы к его прототипу.Это не работает в старых IE, хотя я бы рекомендовал против этого.

...