2011-10-20 31 views
5

Tôi có một vấn đề, tôi muốn tạo ra một lớp JavaScript:Lớp trong JavaScript sử dụng nguyên mẫu

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. 

} 

Vì vậy, làm thế nào tôi có thể giải quyết này?

Trả lời

3

Bạn có xung đột giữa các giá trị this. Bạn hiện không có quyền truy cập vào cá thể vì this đã được đặt thành phần tử bên trong trình xử lý nhấp chuột.

Bạn có thể làm một chức năng proxy để vượt qua cả giá trị this (phần tử) và Ví dụ:

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; 
}; 
+0

oh, bạn đã lưu tóc của mình, cảm ơn! – elios264

3

Bạn có thể sử dụng 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); 
} 

Edited. Jason đã đưa ra một điểm tốt trong các ý kiến. Có lẽ tốt hơn nên sử dụng event.target chỉ tham chiếu phần tử được nhấp, thay vì elements có thể tham chiếu một mảng đối tượng khớp với lựa chọn.

+1

hoặc sử dụng 'event.target' thay vì lưu các phần tử (sự kiện là tham số đầu tiên trong clickHandler) –

+0

@Jason, vâng cuộc gọi tốt. – hyperslug

+0

Lưu ý rằng event.target (thông số W3C) không tương thích với IE - Bạn cũng sẽ phải kiểm tra event.srcElement. –

Các vấn đề liên quan