Я думаю, разница в шаблонах использования.
Я предпочел бы .on
над .click
, потому что предыдущий может использовать меньше памяти и работать для динамически добавленных элементов.
Рассмотрим следующий html:
<html>
<button id="add">Add new</button>
<div id="container">
<button class="alert">alert!</button>
</div>
</html>
, где мы добавляем новые кнопки через
$("button#add").click(function() {
var html = "<button class='alert'>Alert!</button>";
$("button.alert:last").parent().append(html);
});
и хотим «Alert!» чтобы показать предупреждение. Для этого мы можем использовать «щелчок» или «вкл».
click
$("button.alert").click(function() {
alert(1);
});
с указанным выше, обработчик раздельный создается для каждого отдельного элемента , который соответствует селектору. Это означает, что
.on
$("div#container").on('click', 'button.alert', function() {
alert(1);
});
с указанным выше, single для всех элементов , которые соответствуют вашему селектору, включая динамически созданные.
.on
Как прокомментировал Adrien ниже, другой причиной использования .on
являются события с именами.
Если вы добавили обработчик с .on("click", handler)
, вы обычно удаляете его с помощью .off("click", handler)
, который удалит этот обработчик. Очевидно, что это работает, только если у вас есть ссылка на функцию, так что, если вы этого не сделаете? Вы используете пространства имен:
$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });
с отключением через
$("#element").off("click.someNamespace");
B.name
атрибут класса, не атрибут экземпляра. Это обнаруживается в B.__dict__
, но не в b = B(); b.__dict__
.
различие затенено несколько, потому что при доступе к атрибуту на экземпляре класс dict является нейтрализацией. Таким образом в вышеупомянутом примере, b.name
даст Вам значение B.name
.
class A:
def _ _init_ _(self):
self.name = 'A'
a = A()
Создает атрибут на экземпляре объекта типа A, и это может поэтому быть найдено в: a.__dict__
class B:
name = 'B'
b = B()
Создает атрибут на классе B, и атрибут может быть найден в B.__dict__
альтернативно, если у Вас есть экземпляр b типа B, Вы видите атрибуты уровня класса в b.__class__.__dict__