为了账号安全,请及时绑定邮箱和手机立即绑定

所有浏览器的Object.Watch()?

所有浏览器的Object.Watch()?

RISEBY 2019-07-08 16:28:00
所有浏览器的Object.Watch()?请注意Object.Watch和Object.Observe现在都被否决了(2018年6月)。我在寻找一种简单的方法来监视对象或变量的变化,我发现Object.watch(),这在Mozilla浏览器中是支持的,但不支持IE。所以我开始四处寻找,看看有没有人写过类似的东西。我发现的唯一件事就是jQuery插件但我不确定这是不是最好的方法。我当然在我的大多数项目中使用jQuery,所以我不担心jQuery方面.总之,问题是:有人能给我看一个jQuery插件的工作示例吗?我很难让它起作用.。或者,有没有人知道有什么更好的选择可以跨浏览器工作?回答后更新:谢谢大家的回复!我试用了这里发布的代码:http:/webreflection.blogpot.com/2009/01/internet-Explorer-Object-Wat.html但我似乎无法使它与IE一起工作。下面的代码在Firefox中运行良好,但在IE中什么也不做。在Firefox中,每次watcher.status被更改,则document.write()在……里面watcher.watch()调用,您可以在页面上看到输出。在IE中,这种情况不会发生,但我可以看到watcher.status是更新值,因为最后一个document.write()Call显示正确的值(在IE和FF中)。但是,如果没有调用回调函数,那就没有意义了.*)我是不是遗漏了什么?var options = {'status': 'no status'},watcher = createWatcher(options);watcher.watch("status", function(prop, oldValue, newValue) {   document.write("old: " + oldValue + ", new: " + newValue + "<br>");   return newValue;});watcher.status = 'asdf';watcher.status = '1234';document.write(watcher.status + "<br>");
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

我创造了一个小的物体,注意垫片一段时间前的事。它适用于IE8、Safari、Chrome、Firefox、Opera等。


查看完整回答
反对 回复 2019-07-08
?
墨色风雨

TA贡献1853条经验 获得超6个赞

当前答案

使用新的代理对象,它可以监视对其目标的更改。

let validator = {
    set: function(obj, prop, value) {
        if (prop === 'age') {
            if (!Number.isInteger(value)) {
                throw new TypeError('The age is not an integer');
            }
            if (value > 200) {
                throw new RangeError('The age seems invalid');
            }
        }

        // The default behavior to store the value
        obj[prop] = value;

        // Indicate success
        return true;
    }};let person = new Proxy({}, validator);person.age = 100;console.log(person.age); // 100person.age = 'young'; 
    // Throws an exceptionperson.age = 300; // Throws an exception



查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 592 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信