Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 关闭不使用多个对象的事件侦听器?_Javascript_Jquery_Svg - Fatal编程技术网

Javascript 关闭不使用多个对象的事件侦听器?

Javascript 关闭不使用多个对象的事件侦听器?,javascript,jquery,svg,Javascript,Jquery,Svg,因此,我正在为可移动的SVG对象编写一个实现。(我确实想自己做这件事,因为我需要一些特殊功能) 对于每个SVG,我都有一个包含额外数据等的JS对象。 在构造函数中,我创建了一个SVG元素并将其附加到SVG中 var self; // maybe this is a problem? I need it for prototyping and the whole code is wrapped in a factory function var Scooter = function(id) {

因此,我正在为可移动的SVG对象编写一个实现。(我确实想自己做这件事,因为我需要一些特殊功能)
对于每个SVG,我都有一个包含额外数据等的JS对象。
在构造函数中,我创建了一个SVG元素并将其附加到SVG中

var self; // maybe this is a problem? I need it for prototyping and the whole code is wrapped in a factory function

var Scooter = function(id) {
    this.id = id; // this is just n-th instance
    this.svgElement = document.createElementNS(SVG_NS, "g");
    // doing some extra svg stuff
    SVG.appendChild(this.svgElement);

    self = this; // need this for the listener

    // **1**
}
现在我想添加draggable特性,所以我要绑定一个仍然在构造函数中的事件侦听器。(参见上述代码示例中的
**1**

嗯。现在,如果我正在创建一个实例,它可以正常工作。当我添加第二个实例时,一切看起来都很好。我可以移动第二个,就像它应该的那样。但是如果我再次拖动第一个对象,它将移动第二个(或最后创建的)对象

每个SVG元素都被完美地显示出来,我认为每个元素都有自己的处理程序。但是,如果我从第一个对象检查处理程序的闭包变量,
self
现在会给我最新对象的引用。

有人能解释一下为什么会发生这种情况,并建议解决方法吗?

好吧

var Something = (function(){
   //constructor
   function Something(){
     ....
   }

   Something.prototype = {
     func1: function() {
     },
     func_n: function() {
     }
   };
   return something;
})()
没有自我

var Something = (function(){
   //constructor
   function Something(){
     ....
   }

   Something.prototype = {
     func1: function() {
     },
     func_n: function() {
     }
   };
   return something;
})()

无self

您的self变量点始终指向创建的最后一个实例。。还有,为什么你需要这个全球性的自我?自我并不是完全全球性的。我需要它,因为我正在向对象添加原型函数,其中需要一个自引用。在原型设计中,自我参照总是完美地工作。所以我不认为问题是这个“全球”自我。但是我不是js大师,所以如果我错了,请告诉我如何让它运行。在我看来,所有的实例都在分享自我。Put
var self=this在构造函数内部,而不是外部。确定。我记得我在原型设计中使用了这个“自我”作为参考,因为“这个”在那里不起作用。。。也许我错了。我明天必须检查一下这个。到目前为止,谢谢你。:)您的自变量点始终指向创建的最后一个实例。。还有,为什么你需要这个全球性的自我?自我并不是完全全球性的。我需要它,因为我正在向对象添加原型函数,其中需要一个自引用。在原型设计中,自我参照总是完美地工作。所以我不认为问题是这个“全球”自我。但是我不是js大师,所以如果我错了,请告诉我如何让它运行。在我看来,所有的实例都在分享自我。Put
var self=this在构造函数内部,而不是外部。确定。我记得我在原型设计中使用了这个“自我”作为参考,因为“这个”在那里不起作用。。。也许我错了。我明天必须检查一下这个。到目前为止,谢谢你。:)如果我在你的构造器前面放一个“self”,每个“某物”都应该有自己的“self”对吗?如果我在你的构造器前面放一个“self”,每个“某物”都应该有自己的“self”对吗?