javascript - 关注属性(property)创造事件?

标签 javascript jquery jquery-events

我需要能够确定何时创建对象(不是 DOM 元素 -- JavaScript 对象)。

An answer to this question有一些非常有用的代码用于创建可观察的属性,因此您可以在属性更改时触发函数。

在我的情况下,我需要在创建对象/属性时做一些事情,而不是更改现有属性,而我对此类问题的有限理解并没有帮助我弄清楚是否或如何在之后使用该代码来执行此操作多眯着眼睛。

情况是:页面加载了一堆脚本。一些脚本创建其他脚本需要的东西,例如:

ThisStuff = (function () {
  // blah blah
   return self;
} ());

一些其他代码需要初始化这个 ThisStuff,只要它可用,这可能是在 DOM 加载完成之后。用户实际上并不立即需要 ThisStuff,因此在脚本加载完成时发生它是可以的。所以我想做一些事情:

$(document).ready(function() {
   wheneverIsAvailable(window,'ThisStuff', function(object) {
       object.init(args);
   })
});

我意识到这个问题还有其他解决方案(更改脚本顺序,或按需加载脚本),但由于架构的原因,这些解决方案很困难。因此,与其他解决方案相比,我只对一种方法感兴趣。如果 jQuery 提供了一些这样的功能,那也很好,因为我正在使用它。

最佳答案

您可以让 setInterval 每秒检查多次以观察特定变量。您可以检查它是否使用 obj.hasOwnProperty(prop) 创建。创建时,调用该函数并清除间隔。

它可能很脏,但它也可能适合您。

编辑: 我为您编写了代码:http://jsfiddle.net/jhXJ2/2/ .它还支持向函数传递额外的参数。

window.__intervals = [];

function wheneverIsAvailable(obj, prop, func) {
    var id = (Math.random()+"").substring(2);
    var args = arguments;
    window.__intervals[id] = window.setInterval(function() {
        if(obj.hasOwnProperty(prop)) {
            window.clearInterval(window.__intervals[id]);
            func(Array.prototype.slice.call(args, 3));
            // Call function with additional parameters passed
            // after func (from index 3 and on)
        }
    }, 1000/ 50);
}

wheneverIsAvailable(window, 'test', function() {
    alert(arguments[0]);
}, 'Woot!');

window.setTimeout('window.test = 123', 1000);

关于javascript - 关注属性(property)创造事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5316666/

相关文章:

javascript - 利用源映射的堆栈跟踪

javascript - 无法从嵌套的 json 生成下拉列表并对其进行过滤

javascript - 从主干集合加载完整日历事件会破坏下一个和上一个功能

jQuery - .append() 和 .fadeIn() 不起作用

javascript - web3 - 处理事务时出现 VM 异常 : out of gas

javascript - 禁用所有 ID 属性以

jQuery绑定(bind)多个事件,并传递数据

javascript - 在 JQuery 中获取祖 parent 的第一个 child 的最优雅、可靠和高效的方法是什么?

jquery - 使用 jquery 从 json 字符串填充选择框

javascript - 以特定间隔将图像插入 DOM