由于在发送element.addEvent
中的方法时我无法使用“this”,因此在实现mootools中的类时出现问题。如何在mootools类中的函数中调用此函数
说我有这样的mootools类:
var Dude = new Class({
highlightColor: '#f00',
doStuff: function() {
var parent = $('theParentId');
new Element('div', {'html': 'Click me'})
.inject(parent)
.addEvent('click', function(){
new Element('div', {'html': 'you clicked'})
.highlight(this.highlightColor);
});
},
});
此代码将抛出的addEvent方法调用内部异常,因为this
突然在另一种情况下。有没有其他方法来获取对象的highlightColor(或mootools类可能有的其他成员)?
应该使用'bind'来代替'bindWithEvent' - 这是核心开发者鼓励不要使用'bindWithEvent'的“mootools方式”。 – 2010-09-15 20:40:14
@Oskar,好吧,'bindWithEvent'已经被完全做成了,[documentation](http://j.mp/cAoTn4)在使用addEvent时特别推荐它的用法:“这允许函数与Element一起使用:addEvent和arguments。“,尽管我承认使用bind的好处之一是,ECMAScript 5标准的本地实现Function.prototype.bind将很快在所有浏览器上提供,本机实现总是有很好的性能。无论如何,如果Core开发人员不鼓励使用此方法,那么文档中的注释将会有所帮助。 – CMS 2010-09-15 20:49:10
我同意Oskar的意见,它使用'bind'更常见 - 保持范围到类实例的工作就像这样完成。就我的理解而言,在这里你不需要'bindWithEvent' - 他在回调中访问的所有内容都是'this.highlightColor'属性,所以将范围保持到类实例就足够了。该事件根本不需要传递,因为回调已经按照定义直接访问它。例如'... click ...“,this.methodName.bind(this)'也会将事件对象传递给方法作为第一个参数,那么'bindWithEvent'有什么好的测试用例吗? – 2010-09-16 00:18:53