【问题标题】:Watch a variable in an object in Node.js在 Node.js 中观察对象中的变量
【发布时间】:2017-12-22 04:21:30
【问题描述】:

Object 中某些变量的更改需要通知我。但是Object 不是预定义的。我尝试了以下Watchers

watchjs

watchObject

gawk

在所有这些观察者中,Object 是预定义的。

我需要一个类似下面的功能。

//Initially the Object will be empty.
var ex1 = {      
};

//Will watch for variable1 in that Object
watch(ex1, "variable1", function(){
    console.log("Variable1 changed");
});

//Changing or Adding a variable1 in Object. Now the above watch should trigger.
ex1 = {
    variable1 : "Hai",
    variable2 : "Hello"
}

任何Watchers 这样做或任何调整?

【问题讨论】:

  • 您没有更改示例中对象的任何内容;您正在创建一个全新的对象并丢弃旧对象。您可以使用调试器来观察变量。
  • 大开眼界的评论..谢谢

标签: javascript node.js object watch


【解决方案1】:

在下面发布,因为它可能对像我这样的人有所帮助。

我通过使用assign 实现了这一点。

//Initially the Object will be empty.
var ex1 = {      
};

//Will watch for variable1 in that Object
watch(ex1, "variable1", function(){
    console.log("Variable1 changed");
});

//Changing or Adding a variable1 in Object. Now the above watch got triggered.
var ex2 = {
    variable1 : "Hai",
    variable2 : "Hello"
}

Object.assign(ex1, ex2);

【讨论】:

  • 如您所说, assign 不会将新对象分配给现有对象。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… “Object.assign() 方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。”复制属性的值与复制对象不同,通常的理解是复制对象引用(如原始问题中的最后一行代码)。
  • 谢谢尼克。更新了答案。我的措辞是错误的,但我希望我所做的是正确的
  • 是的,当然,我只是想把 Ryan 提出的观点带回家。当没有清楚地考虑对象和引用时,很容易陷入陷阱。 ex.variable1 = 'Hai';ex = { variable1: 'Hai' }; 非常不同。感谢您的理解:)
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多