this
устанавливается при вызове функции. В этом случае ваш встроенный код вызывается как функция с this
, установленным для элемента, но когда вы вызываете greenBorder
, его this
не устанавливается.
(Если вы вызывали свойство например, myObject.myMethod()
, то вместо this
будет установлен объект myObject
. В противном случае это будет window
или, если ваш код JavaScript работает в строгом режиме, undefined
.)
Вы можете явно указать его this
, используя метод .call
:
<p id="firstP" onmouseover="greenBorder.call(this)"> I'm Batman </p>
... таким образом, опубликованный вами код будет работать как есть :
function greenBorder () {
this.style.border = "1px solid green"
}
Или вы можете передать элемент в качестве аргумента:
<p id="firstP" onmouseover="greenBorder(this)"> I'm Batman </p>
В последнем случае вам придется изменить свою функцию, чтобы использовать аргумент вместо this
:
function greenBorder (element) {
element.style.border = "1px solid green"
}