Javascript Snap.svg—;单击其中一个元素时删除对象

Javascript Snap.svg—;单击其中一个元素时删除对象,javascript,svg,snap.svg,Javascript,Svg,Snap.svg,我在一个组中绑定了一个包含3个元素的对象,当单击绿色矩形时,我需要删除这个对象(或者至少它的图形表示-组)。 a.click()有效,但c.click()无效,我想知道原因: var s = Snap(500, 500); function myObj() { this.g = s.group(); this.drawIt = function() { var a = s.rect(0, 0, 50, 50, 0, 0).attr({'fill':'#E82941

我在一个组中绑定了一个包含3个元素的对象,当单击绿色矩形时,我需要删除这个对象(或者至少它的图形表示-组)。 a.click()有效,但c.click()无效,我想知道原因:

var s = Snap(500, 500);

function myObj() {

    this.g = s.group();

    this.drawIt = function() {

    var a = s.rect(0, 0, 50, 50, 0, 0).attr({'fill':'#E82941'}),
        b = s.rect(20, 20, 50, 50, 0, 0).attr({'fill':'#FF6E00'}),
        c = s.rect(40, 40, 50, 50, 0, 0).attr({'fill':'#00C049'});

        this.g.append(a, b, c);

        a.click(function(e){this.attr({'fill':'#000'});});
        c.click(this.killIt);
    }

    this.killIt = function() {
        this.g.remove();    
    }

}

var obj = new myObj();

obj.drawIt();
Snap.svg 0.3.0


已解决:

这是闭包问题,
c.click
处理程序中的
this
不代表
myObj

声明一个变量
var=this构造函数内部
myObj
如下所示

function myObj() {

  var that = this;

  this.g = s.group();

  this.drawIt = function() {
    var a = s.rect(0, 0, 50, 50, 0, 0).attr({'fill':'#E82941'}),
        b = s.rect(20, 20, 50, 50, 0, 0).attr({'fill':'#FF6E00'}),
        c = s.rect(40, 40, 50, 50, 0, 0).attr({'fill':'#00C049'});

        this.g.append(a, b, c);

        a.click(function(e){this.attr({'fill':'#000'});});
        c.click(function(e){that.killIt()});
  }

  this.killIt = function() {
            this.g.remove();    
  }

}

var obj = new myObj();

obj.drawIt();

如果在另一个函数中声明函数,则
变量将与父函数的变量不同。在这种情况下,它将指向
c
对象,在
a的情况下,单击
,因为
指向
a
,它工作了。

谢谢!killIt()只删除“a”,而不是整个组。是否有方法删除包括“a”、“b”和“c”形状的组?因为在
g
中只有
a
,而不是
this.append(a,b,c)
尝试
this.g.append(a);本附录g(b);本附录g(c)。成功了,谢谢!我以前从未使用过带多个参数的append。出于兴趣,用
()=>{this.killIt()}
替换
this.killIt
是否也有效?