x.id = ""; // if-statement of the g() function is called here?
Если код действительно такой, как вы его показываете, эта строка кода не будет генерировать вызов функции.Строка - это просто присвоение свойству id
x
.Единственный способ вызвать вызов функции, если вы присвоите свойству id
значение x
, - это если бы вы использовали браузер, который поддерживал методы доступа к свойствам (геттеры и сеттеры), что очень маловероятно (и в вашем ничего неткод делает это).
Казалось бы, что-то еще вызывает g
в цикле некоторого вида, и поэтому при изменении значения следующий вызов g
увидит изменение.Как отметил Джонатон в своем комментарии к этому вопросу, это может быть что-то, что вы настроили с помощью setTimeout
, или setInterval
, или в четном обработчике (например, при перемещении мыши) и т. Д., Но это ничегов указанном коде.
Возможно, не по теме:
У вас есть строка кода с самого начала:
var x = new function f() {
this.id = "";
}
Этот код использует «выражение именованной функции», которое должно быть допустимым, но вызывает проблемы в некоторых реализациях (например, IE).Разделите его, чтобы получить желаемый результат в кросс-браузерном режиме:
var x = new f();
function f() {
this.id = "";
}
Не по теме :
Вы не используете javascript:
псевдопротокольный протокол, за исключением атрибутов, которые принимают URI (например, href
для a
элементов).Атрибут onclick
не принимает URI, он принимает код JavaScript, поэтому измените:
obj.firstChild.setAttribute("onclick", "javascript:o();");
на
obj.firstChild.setAttribute("onclick", "o();");
Но , еще лучше, назначьтенепосредственно обработчик:
obj.firstChild.onclick = o;
... или даже подумайте об использовании addEventListener
или его IE-аналога attachEvent
вместо.