在javascript中,如何在变量值改变时触发事件?

Byr*_*ahl 24 javascript

我有两个变量:

var trafficLightIsGreen = false; 
var someoneIsRunningTheLight = false;
Run Code Online (Sandbox Code Playgroud)

当两个变量符合我的条件时,我想触发一个事件:

if(trafficLightIsGreen && !someoneIsRunningTheLight){
    go(); 
}
Run Code Online (Sandbox Code Playgroud)

假设这两个布尔值在任何时刻都可以改变,那么go()当他们根据我的条件改变时如何触发我的方法呢?

Jar*_*Par 31

在Javascript中更改给定值时,不会引发任何事件.您可以做的是提供一组函数,这些函数包含特定值并在调用它们时生成事件以修改值.

function Create(callback) {
  var isGreen = false;
  var isRunning = false;
  return { 
    getIsGreen   : function()  { return isGreen; },
    setIsGreen   : function(p) { isGreen = p; callback(isGreen, isRunning); },
    getIsRunning : function()  { return isRunning; },
    setIsRunning : function(p) { isRunning = p; callback(isGreen, isRunning); }
  };
}
Run Code Online (Sandbox Code Playgroud)

现在你可以调用这个函数并链接回调来执行go():

var traffic = Create(function(isGreen, isRunning) {
  if (isGreen && !isRunning) {
    go();
  }
});

traffic.setIsGreen(true);
Run Code Online (Sandbox Code Playgroud)