我可以在变量上创建任何触发器吗?

时间:2018-12-24 13:52:05

标签: javascript jquery

我在开始时在页面上创建了一个变量,每当我更改该变量时,我都会调用一个方法。我想做一些类似的事情,如果我为该变量分配新值,并且该方法执行autoaLLy。对于代码参考,我在下面写一些东西。

好吧,我不想每次都写两行,就像第一行为变量赋值和第二行调用方法一样。我只想编写仅用于分配变量的一行,它会自动执行该方法。

请帮助我。

  var SelectedUser = 0;

function LoadInformation()
{
    alert("Selected User is " + SelectedUser);
}

function UpdateSelectedUser(){
    SelectedUser = 5;
}

3 个答案:

答案 0 :(得分:1)

您可以在javascript中使用设置器,如下所示:

const express = require('express');

const app = express();

const router = express.Router();

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
next();
});

const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.post('/upload/files', (req, res) => {
    var fileName = req.body.currentFileName;
    var fileType = req.body.currentFileType;
console.log('Nom du fichier: ' + fileName + ' ' + 'Type du fichier: ' + fileType);
res.send(fileName + fileType);
});

const port = 5000;

app.listen(port, () => `Server running on port ${port}`);

希望这会有所帮助

答案 1 :(得分:1)

使用Proxy对象。

  

Proxy对象用于为基本对象定义自定义行为   操作(例如,属性查找,赋值,枚举,函数   调用等)。

向我显示代码

var targetVariable = {};
var targetProxy = new Proxy(targetVariable, {
  set: function (target, key, value) {
      console.log('Value changed');
      target[key] = value;
      return true;
  }
});

targetProxy.hello_world = "test"; // console: 'value changed!!'

答案 2 :(得分:1)

由于使用的是jQuery,因此可以轻松触发事件并附加自定义事件侦听器。例如,每次您更改变量内容时都会触发valueChanged事件:

var SelectedUser = 0;

$(document).on('valueChange', function() {
	alert("Selected User is " + SelectedUser);
})

function UpdateSelectedUser(){
    SelectedUser = 5;
    $('body').trigger('valueChange')
}

UpdateSelectedUser();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>