【发布时间】:2012-04-24 03:43:45
【问题描述】:
在 C++ 中,我可以显式定义构造函数和析构函数,然后在构造函数/析构函数中 cout
但是在 JavaScript 中,我如何知道对象何时被破坏。下面的例子就是我关心的情况。
我在超时时调用一个内部函数,我想知道只要计时器运行,对象是否还活着,等待再次调用下一个。
用户点击调用控制
// Calls Control
控制调用消息
var message_object = new Message( response_element );
消息调用效果
new Effects().fade( this.element, 'down', 4000 );
message_object.display( 'empty' );
效果
/**
*Effects - build out as needed
* element - holds the element to fade
* direction - determines which way to fade the element
* max_time - length of the fade
*/
var Effects = function( )
{
this.fade = function( element, direction, max_time )
{
element.elapsed = 0;
clearTimeout( element.timeout_id );
function next()
{
element.elapsed += 10;
if ( direction === 'up' )
{
element.style.opacity = element.elapsed / max_time;
}
else if ( direction === 'down' )
{
element.style.opacity = ( max_time - element.elapsed ) / max_time;
}
if ( element.elapsed <= max_time )
{
element.timeout_id = setTimeout( next, 10 );
}
}
next();
}
};
【问题讨论】:
-
JavaScript 垃圾收集 - stackoverflow.com/q/864516/402706
-
一般情况下是的,有关解除分配对象的具体条件的讨论,请参见上面的链接。
-
您担心哪个对象的寿命?
-
不,你的想法正好相反。 Control 有对 Message 的引用,但不一定是相反的。除非 Effects 有某种访问 Message 的方式——除非 Message 调用它或将对自身的引用传递给它,否则它不会—— Message 消失。是的,this.element 仍然存在,但它周围的对象消失了。
标签: javascript