我遇到了问题,我想创建一个JavaScript类:
function Calculatore(txt,elements) {
this.p= new Processor();
this.output=txt;
$(elements).click(this.clickHandler);
}
Calculatore.prototype.clickHandler = function() {
var element=$(this);
// Code Here
// "this" contains the element.
// But what if I want to get the "output" var?
// I tried with Calculatore.prototype.output but no luck.
}
那我怎么解决这个问题呢?
答案 0 :(得分:3)
this
值之间发生冲突。您当前无权访问该实例,因为this
已设置为单击处理程序中的元素。
您可以创建一个代理函数来传递this
值(元素)和实例:
function Calculatore(txt,elements) {
this.p= new Processor();
this.output=txt;
var inst = this; // copy instance, available as 'this' here
$(elements).click(function(e) {
return inst.clickHandler.call(this, e, inst); // call clickHandler with
// 'this' value and 'e'
// passed, and send 'inst'
// (the instance) as well.
// Also return the return
// value
});
}
Calculatore.prototype.clickHandler = function(e, inst) {
var element = $(this);
var output = inst.output;
};
答案 1 :(得分:3)
您可以使用jQuery的$.proxy
:
function Calculatore(txt,elements) {
this.p= new Processor();
this.output=txt;
$(elements).click($.proxy(this.clickHandler, this));
}
Calculatore.prototype.clickHandler = function(event) {
var clickedElement = event.target;
alert(this.output);
}
编辑。杰森在评论中提出了一个很好的观点。最好使用event.target
仅引用单击的元素,而不是引用与选择匹配的对象数组的elements
。