DOM написан на C / C ++, где концепция получения и установки переменной Javascript не существует, как вы, или я часто представляю это.Вы, вероятно, вообразили, что код будет реализован так, как показано ниже.К сожалению, Object.watch
никогда не инициируется, потому что DOM не постоянно обновляет значение Javascipt, но Javascript запрашивает обновление из DOM.
input.onuserchangevalue = function(){
input.value = 'new user input'
}
Думая, как DOM обычно работает, каждый элемент имеет десяткипотенциальные свойства.
innerHTML
, value
, style.cssText
, name
, id
, style.background
, style.backgroundColor
Представьте себе, есликод подчеркивания DOM должен был постоянно обновлять все свойства Javascript каждого элемента DOM%) Циклы памяти и ЦП проходили через крышу, чтобы гарантировать соответствие свойств отображаемому значению.Внутренние компоненты DOM также должны были бы проверить, изменилось ли значение Javascript потенциально.
Реальность - Красная таблетка
В основном DOM не передает информацию в javascript, но Javascript запрашивает информацию уДОМ.Это достойная интерпретация Javascript того, что происходит внизу.
Object.defineProperty(input, "value", {
get : function(){ /* get C/C++ DOM value */ },
set : function(){ /* change C/C++ DOM value */ }
});
Это объясняет, почему DOM часто является узким местом для Javascript.Javascript должен запрашивать / устанавливать внутренние значения DOM каждый раз, когда вы взаимодействуете с DOM.