Когда вызывается alert
, метод toString
вызывается изнутри, поэтому в случае якорей, предупреждающих href, toString якорей возвращает href.
<a id="foo" href="blah">fsdjl</a>
В консоли JS выполните:
document.getElementById('foo').toString()
Это подтвердит это.
Что касается window
, this
не привязан к методу, принадлежащему якору, поэтому this
относится к глобальному контексту. onclick
привязан к привязке, поэтому this
, то есть текущий контекст выполнения, изменяется на привязку.
<a href="#" onclick="javascript:alert( this.nodeName )">blah</a>
Результатом является оповещение A
, которое является nodeName, поэтому браузер возвращает href
, если есть набор href
, поэтому он более "читабелен" и менее расплывчат.