我试图在 jQuery.on() 中使用 jQuery.proxy() 方法更进一步,但由于涉及多个“this”的范围,我被困在一个点上。
这是使用 jQuery.proxy() 的经典方式:
var obj = {
somevar: 'some value',
doSomething: function() {
alert(this.somevar);
}
};
$('div').click( $.proxy(obj.doSomething, obj) ); // -> 'some value'
好的,很好,但是...我想从“div”获取一些信息以将其发送到“doSomething”...
function Foo(element) {
this.element = element;
this.init();
}
Foo.prototype = {
init: function () {
this.element.on('click', 'button', $.proxy(function () {
// trying to send the type of the button to the doSomething method
this.doSomething( $(this).attr('type') );
}, this));
},
doSomething: function (data) {
alert(data); // -> 'undefined'
}
};
var Bar = new Foo( $('div') );
当然它不起作用,因为'$(this)'中的'this'不是jQuery按钮对象......我找到的唯一解决方案是修改一点'init'方法:
init: function () {
var that = this;
this.element.on('click', 'button', function () {
that.doSomething( $(this).attr('type') );
});
},
有没有办法使用 $.proxy() 方法而不是这个“那个”变量?