观看房产创建活动?

我需要能够确定何时创建对象(不是DOM元素 – 一个javascript对象)。

这个问题的答案有一些非常有用的代码用于创建可观察的属性,因此您可以在属性更改时触发函数。

在我的情况下,我需要在创建对象/属性时执行某些操作,而不是更改现有属性,并且我对此类事项的有限理解无法帮助我弄清楚是否或如何使用该代码在经过多次眯眼之后执行此操作。

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

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

一些其他代码需要初始化此ThisStuff ,只要它可用,这可能是在DOM完成加载之后。 用户实际上并不需要ThisStuff ,因此只要脚本加载完成就可以。 所以我想按照以下几点做一些事情:

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

我意识到这个问题有其他解决方案(更改脚本顺序,或按需加载脚本),但由于体系结构,这些很难。 所以我只对与其他解决方案相比的方式感兴趣。 如果jQuery提供了一些这样的function,那我也可以使用它。

您可以让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); 

这有点牵强,但它可能会奏效。

你需要使用knockoutjs,一个javascript库。 它很棒但是为了略微不同的目的而构建。

无论如何,它有一个dependentObservable事物,它允许在某个值发生变化时触发事件。 现在我知道你想要创建,但你可以检查你的变量是否包含任何值(除了你最初提供的值),如果是,那么考虑它初始化。

如果您认为这听起来可行,请告诉我。