Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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 如何在JS中处理原型?_Javascript_Prototype_Dispose - Fatal编程技术网

Javascript 如何在JS中处理原型?

Javascript 如何在JS中处理原型?,javascript,prototype,dispose,Javascript,Prototype,Dispose,我有一个棘手的问题,虽然答案可能很明显,但我不知道如何去做我正试图做的事情 我已经为我的应用程序创建了一个脚本库,它使用JS原型和模板来动态实例化DOM元素,并用处理程序连接这些元素。一个例子如下: var ppane = new AWP.iuiPanel(theObject, { title: 'Select filter(s)', idDisplay: 'block', idString: params.sender._options['title'] }); AWP.iuiPanel是定

我有一个棘手的问题,虽然答案可能很明显,但我不知道如何去做我正试图做的事情

我已经为我的应用程序创建了一个脚本库,它使用JS原型和模板来动态实例化DOM元素,并用处理程序连接这些元素。一个例子如下:

var ppane = new AWP.iuiPanel(theObject, { title: 'Select filter(s)', idDisplay: 'block', idString: params.sender._options['title'] });
AWP.iuiPanel是定义为函数原型的类,例如:

AWP.iuiPanel = function() { <i'm a constructor> }
AWP.iuiPanel.prototype = { <a bunch of methods here> }
上面是一个简单的例子,它将接受一个DOM对象引用,然后它将动态构造一个新的DOM元素,并将连接到浏览器事件,以便在调整页面大小时始终保持这两个对象之间的相对位置

当我处理新对象时,我还需要处理类实例,我找不到一种简单的方法来处理它

谢谢你的帮助


谢谢,

关于引用已删除DOM节点的事件侦听器的建议:

 AWP.iuiPanel.prototype = null; // ?

正如您有一个“wireEvents”,如果您决定停止使用该对象,您应该有一个相应的“Unwreevents”。在这种情况下,addEventListener()需要与removeEventListener()结合使用。正如您所说,当相应的DOM节点被“释放”时,您应该修改原型以删除事件侦听器

这不会处理特定实例。假设我创建了类的两个实例:var ppane1=new AWP.iuiPanel(对象,{title:'Select filter(s)”,idDisplay:'block',idString:params.sender._options['title']});var ppane2=new AWP.iuiPanel(对象,{title:'嘿,我是另一个!',idDisplay:'block',idString:params.sender.\u options['title']});我必须能够处理该实例。但是我不能简单地将ppane1或ppane2设为null——这并不能清除实例。这让我走上了正确的道路。问题是,即使在销毁DOM对象之后,jQuery事件仍然保持绑定状态,因此将继续针对不存在的DOM对象执行。有关详细信息,请参见下面的答案。谢谢。我做了两件事。首先,jQuery事件绑定使用命名的处理程序完成:
this.\u windowHandler=Function.createDelegate(this,this.positionRelative);jQuery(window).resize(this.\u windowHandler)忽略ajax.net-isms-显然,编写此代码库是为了使用它,但是您可以在不使用委托的情况下执行相同的操作。其次,在类dispose方法中,我解除了特定引用的绑定:
jQuery(window).unbind('resize',this.\u windowHandler)jQuery(myObjectRef).remove()太好了!这样更干净,你知道发生了什么,什么时候发生。
 AWP.iuiPanel.prototype = null; // ?