Другим случаем, когда NullReferenceExceptions
может случиться, является (неправильное) использование оператора as
:
class Book {
public string Name { get; set; }
}
class Car { }
Car mycar = new Car();
Book mybook = mycar as Book; // Incompatible conversion --> mybook = null
Console.WriteLine(mybook.Name); // NullReferenceException
Здесь Book
и Car
являются несовместимыми типами; a Car
не может быть преобразован / передан в Book
. Когда этот сбой завершается неудачно, as
возвращает null
. Используя mybook
после этого, вы вызываете NullReferenceException
.
В общем случае вы должны использовать cast или as
, как показано ниже:
Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:
ComicBook cb = (ComicBook)specificBook;
Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as
:
ComicBook cb = specificBook as ComicBook;
if (cb != null) {
// ...
}
В современных версиях jQuery вы должны использовать метод $._data
для поиска любых событий, связанных jQuery с данным элементом. Примечание , это метод только для внутреннего использования:
// Bind up a couple of event handlers
$("#foo").on({
click: function(){ alert("Hello") },
mouseout: function(){ alert("World") }
});
// Lookup events for this particular Element
$._data( $("#foo")[0], "events" );
Результат из $._data
будет объектом, который содержит оба события, которые мы установили (на фото ниже с свойство mouseout
расширилось):
[/g1]
Затем в Chrome вы можете щелкнуть правой кнопкой мыши функцию обработчика и нажать «Просмотр функции определения», чтобы показать вам точное место, где оно определено в вашем коде.
Общий случай:
Sources
Event Listener Breakpoints
и развернуть дерево Аналогичным образом вы можете:
Inspect element
» event listeners
». Я использовал что-то вроде этого, если ($ ._ data ($ ("a.wine-item-link") [0]). events == null) {... что-то сделать, в значительной степени привязать обработчики событий снова }, чтобы проверить, привязан ли мой элемент к какому-либо событию. Он все равно скажет undefined (null), если вы отключили все обработчики событий от этого элемента. Вот почему я оцениваю это в выражении if.
Хотя это не совсем точно для селекторов / объектов jQuery, в FireFox Quantum 58.x вы можете найти обработчики событий для элемента с помощью инструментов Dev:
Когда я передаю небольшой комплексный запрос DOM к данным $ ._ следующим образом: $._data($('#outerWrap .innerWrap ul li:last a'), 'events')
он бросает неопределенные в консоли браузера.
Поэтому мне пришлось использовать данные $ ._ в родительском div: $._data($('#outerWrap')[0], 'events')
, чтобы увидеть события для тегов. Вот JSFiddle для этого же: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/
$('#outerWrap')
. События фактически связаны с этим элементом, а не с отдельными якорями.
– Scottux
14 May 2014 в 16:06
Плагин плагина jQuery Audit плагин должен позволить вам сделать это через обычные инструменты Chrome Dev. Это не идеально, но это должно позволить вам увидеть фактического обработчика, связанного с элементом / событием, а не только с общим обработчиком jQuery.
Я добавляю это для потомков; Есть более простой способ, который не требует написания более JS. С помощью удивительного дополнения firebug для firefox ,
Обратите внимание, что события могут быть прикреплены к самому документу, а не к рассматриваемому элементу. В этом случае вы захотите использовать:
$._data( $(document)[0], "events" );
И найдите событие с правильным селектором:
Затем посмотрите на обработчик> [[FunctionLocation]]
Теперь вы можете просто получить список прослушивателей событий, привязанных к объекту, с помощью функции javascript getEventListeners ().
Например, введите в консоль инструментов dev следующее:
// Get all event listners bound to the document object
getEventListeners(document);
$._data(element[0], ‘events’);
– totallyNotLizards 23 October 2012 в 09:10$._data()
используется внутренним JQuery.$.data()
является общедоступным методом для пользователя. И$.data(element, 'events')
работает отлично. – novaline 11 May 2017 в 03:54