2013-07-16 22 views
6

tôi mô phỏng một lớp trong kịch bản java, Nó đang ở đây:Làm thế nào để vượt qua một biến bằng cách tham chiếu đến một trình xử lý sự kiện trong javascript?

function myclass() 
{ 
    this.count ; 

    this.init = function(){ 
     $("div.mybtn").click({n:this},function(e){ 
      e.data.n.count++; 
     }); 
    } 

    this.getCount = function(){ 
     alert(this.count); 
    } 
} 

Sau đó, tôi tạo ra một thể hiện của lớp này và thực hiện nó là phương pháp init(), Nhưng khi tôi bấm vào bất kỳ yếu tố div.mybtn, Nó không tăng giá trị của this.count.
Dường như đối tượng this được chuyển đến trình xử lý sự kiện theo giá trị không phải bằng tham chiếu.
Làm thế nào tôi có thể chuyển một biến cho một trình xử lý sự kiện bằng cách tham chiếu?

Cảm ơn bạn đã giúp đỡ

Trả lời

2

Javascript không có tham số truyền qua tham chiếu. Đối với những gì bạn muốn, bạn nên sử dụng một biến đóng cửa:

this.init = function(){ 
    var self = this; 
    $("div.mybtn").click(function(){ 
     self.count++; 
    }); 
} 
1

Bạn có thể viết hàm kết buộc và ràng buộc ngữ cảnh bằng trình xử lý sự kiện.

Function.prototype.bind = function(){ 
    var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift(); 

    return function(){ 
     fn.apply(object, args.concat(Array.prototype.slice.call(arguments))); 
    } 
} 

function myclass() 
{ 
    this.count ; 

    this.clicked = function(){ 
     this.count++;  
    }; 

    this.init = function(){ 
     $("div.mybtn").click(this.clicked.bind(this)); 
    } 

    this.getCount = function(){ 
     alert(this.count); 
    } 
} 
4

Bạn không thể tăng undefined, bạn phải bắt đầu ở đâu đó:

function myclass() { 
    this.count=0; // start counting at zero !!! 

    this.init = function(){ 
     $("div.mybtn").on('click', {n:this},function(e){ 
      e.data.n.count++; 
      e.data.n.getCount(); 
     }); 
    } 

    this.getCount = function(){ 
     console.log(this.count); 
    } 
} 

var c = new myclass(); 

c.init() 

DEMONSTRATION

+0

tôi thử nghiệm là tốt, và các công trình bình thường. – adeneo

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