Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跟踪对象是否已更改_Javascript_Object - Fatal编程技术网

Javascript 跟踪对象是否已更改

Javascript 跟踪对象是否已更改,javascript,object,Javascript,Object,注意:这听起来可能很愚蠢,因为我可以在按钮上的onclick事件中获得更改,但这不是我想要的,我希望严格跟踪对象本身的更改以供任何类型的使用,上面的代码只是一个示例。Javascript不允许您在任意对象/变量上设置编程监视点/事件 您可以使用封装将对象内部的单个值隐藏起来,不让外部世界看到,只允许通过具有所需副作用的专用“setter”函数修改这些值。您可以使用get和set方法将其变成实际的项目: // A simple Javascript Object / String var obje

注意:这听起来可能很愚蠢,因为我可以在按钮上的
onclick
事件中获得更改,但这不是我想要的,我希望严格跟踪对象本身的更改以供任何类型的使用,上面的代码只是一个示例。

Javascript不允许您在任意对象/变量上设置编程监视点/事件


您可以使用封装将对象内部的单个值隐藏起来,不让外部世界看到,只允许通过具有所需副作用的专用“setter”函数修改这些值。

您可以使用get和set方法将其变成实际的项目:

// A simple Javascript Object / String
var object = "hello";

// Imagine a button in the DOM, and if it's clicked the object value will change
document.getElementById("button").onclick = function(){
   window.object = "hello world";
}

// Now I would like to track and do something when the object is changed, ex:
object.onreadystatechange = function(){
   alert(object);
}

这里是一个演示工具:

您可以使用getter和setter跟踪JavaScript对象,如下所述

你也可以看看,


无论您想使用何种框架,在属性更改时自动触发事件都没有神奇之处。在您的情况下,您应该做的可能是使对象围绕此数据,并仅为其公开get和set方法:

// A simple Javascript Object 
var object = new (function(){
    this.text = 'hello';

    this.setText = function(msg){
         this.text = msg
         //on change event
    }
})();

// Imagine a button in the DOM, and if it's clicked the object value will change
document.getElementById("button").onclick = function(){
   object.setText('New Text');
}

最近的Google Chrome版本(例如beta版,带有“启用实验JavaScript”标志)支持Object.observe()API。更多信息请访问和

var something = function()
{
    var value = 10;

    this.getValue = function()
    {
        return value;
    }

    this.setValue = function(newValue)
    {
         ValueChanging(value, newValue);
         value = newValue;
    }

    var ValueChanging = function(old, new)
    {
         // Do Something
    }
}