prototype:Element.remove.bind(foo)无法按预期工作

时间:2009-05-25 14:45:28

标签: javascript prototypejs bind

我有这个片段:

self.puff({duration: 0, queue: 'end',
        afterFinish: Element.remove.bindAsEventListener(self)
    });

自我是一个元素;当它上面的所有效果都完成后,它应该从文档中删除一个元素。

不幸的是,这不起作用,因“element.parentNode未定义”而失败。 如果我将Element.remove.bindAsEventListener(self)替换为function() { self.remove(); },那么它会。我尝试使用相同结果的bind()。

问题是:为什么它不起作用,我应该如何使用bind()?

奖励点用于显示在完成所有效果后删除元素的更简单方法。

2 个答案:

答案 0 :(得分:2)

self.puff({duration: 0, queue: 'end',
    afterFinish: function () { self.remove(); }
});

这种放置方式有什么问题?你甚至自己建议。在任何情况下,您都不需要将其绑定为事件侦听器,因为它只是绑定的Prototype合成糖版本,以确保函数的第一个参数始终是事件对象。由于afterFinish不是浏览器事件,因此没有必要。

最后,您绑定了错误的函数。您应该绑定 self 的方法实例:

self.puff({duration: 0, queue: 'end',
    afterFinish: self.remove.bind(self)
});

答案 1 :(得分:0)

为什么不简单地使用:

function(){ self.remove(); }

这实际上更具可读性。