如果没有setter方法,浏览器如何知道元素已经更改,而只是通过赋值'='?

时间:2013-07-15 20:54:05

标签: javascript html dom

当我在没有setter方法的情况下分配值时,浏览器可以刷新输入元素(或任何其他元素),但只能通过正常赋值:

<script type="text/javascript">
  document.getElementById("element_id").value = 'value';
</script>

是否存在本机事件,或者这是一个Javascript事件?我希望有类似的东西:

function setAttribute(value) {
  model.value = ...
  fireEvent();
}

但我也可以在没有setter的情况下设置属性。

那么这个“事件”在哪里被触发(隐藏在赋值中的'='),以便浏览器知道需要刷新?

问候

3 个答案:

答案 0 :(得分:1)

JS引擎可以随意检测到它。它可能是一个简单的if(dest instanceof DOMElement){特殊处理},或者它可能是一个非常复杂的过程。这只是JS领域的一个简单任务。在实施土地中,只要最终效果正确,它就可以做任何想做的事情。

换句话说,它看起来像一个简单的任务。在幕后,它肯定更多。

答案 1 :(得分:0)

在Javascript中,您可以拥有custom getters and setters对象属性:

var obj = {
  get prop () { alert("Getting prop!"); return 4; }
  set prop (newValue) { alert("Setting prop to " + newValue); }
}

obj.prop = obj.prop + 1;

所以在这里,最后一行触发两个警报。

答案 2 :(得分:0)

就像Corbin说的那样,浏览器的实际JS / DOM实现可以做任何想做的事情。 Javascript是 text ,它被解释(或编译)成在虚拟机中运行的东西。文本的含义,以及它在解释时的效果 - 取决于解释器。

这是迟到和愚蠢的时间,所以要演示一个非常糟糕的“解析器/解释器”在 javascript中编写 ...它只允许一种语句和没有语法检查(或其他任何东西)。但谁知道 - 当浏览器解释实际脚本时,它仍然可以给出(非常简化)的概念:

var myscript1 = "value = 3";
var myscript2 = "othervalue = 5";

var variables = {};

// Hey ho, let's run our two "scripts":
parser(myscript1);
parser(myscript2);

function parser(script)
{
   // Super-simple lexer:
   var tokens = script.split(" ");

   // Rudimentary error checking:
   if (tokens.length != 3 || tokens[1] != "=")
   {
      alert("syntax error!");
   }

   var variable = tokens[0];
   var value = parseInt(tokens[2], 10);

   // Execute our only allowed operation:
   setVariable(variable, value);
}

function setVariable(name, value)
{
   // Store our value (e.g. for later use in our script - if our interpreter
   // actually allowed doing anything except assigning values to variables:
   variables[name] = value;

   // ... and do something with it:
   alert(name + " was set to " + value + "!");
}

我们的“语言”没有函数调用或事件,但我们的“解释器”可以使用给定的“脚本”做任何想做的事情。正如Corbin所说,它看似简单的分配,但在幕后(在setVariable函数中),它肯定更多(好吧,在这种情况下,更多一点 - 触发警报)。