2012-03-17 34 views
9

giả sử tôi có một chức năng:Trong javascript làm thế nào tôi có thể gọi một nguyên mẫu phương pháp trong một phương pháp nguyên mẫu?

function test(){} 

test.prototype.method01=function(){ 
    //do something 
} 

test.prototype.method02=function(){ 
    //how can I call the method01? 
    //this.method01()...? 
    //but the chrome through an error: 
    //Uncaught TypeError: Object #<HTMLImageElement> has no method 'method01' 
} 

được sửa đổi: trên thực tế các method01 như thế này:

test.prototype.method02=function(){ 
    $('.cpy').resizable({ 

    }).draggable({ 
     start:function(e,ui){ 
      this.method01(); 
     } 
    }); 
} 
+2

Bạn gán 'method02' đến một sự kiện của một hình ảnh bởi bất kỳ cơ hội? – pimvdb

+0

Nó phụ thuộc vào * cách * bạn gọi 'phương thức02'. Bạn nên đọc [bài viết MDN về 'this'] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/this). –

+0

@pimvdb: Tôi đã cải thiện câu hỏi của mình, cho thấy cách tôi gọi nó là – hh54188

Trả lời

12
test.prototype.method02=function(){ 
    var testThing = this; 
    $('.cpy').resizable({ 

    }).draggable({ 
     start:function(e,ui){ 
      testThing.method01(); 
     } 
    }); 
} 

Bạn cần phải giữ gìn this tham chiếu trong một biến địa phương để gọi lại chức năng có thể sử dụng nó khi gọi phương thức khác. Tham chiếu this bị ràng buộc theo từng và mọi cuộc gọi hàm, kể cả các cuộc gọi đến các hàm gọi lại giống như chức năng bạn đang sử dụng trong thiết lập ".draggable()". Khi được gọi là this sẽ được đặt thành một cái gì đó khác với this trong hàm "method02" của bạn.

2

Có, bạn có thể lưu vào bộ nhớ cache this theo cách từ vựng giống như các câu trả lời khác trong câu hỏi này. Tuy nhiên, phương án thay thế mà tôi đề xuất là tạo phương thức ràng buộc bằng cách sử dụng $.proxy hoặc function.bind làm cuộc gọi của bạn trở lại.

Phương pháp ràng buộc luôn được gọi với số ổn định this. Tôi tìm thấy chúng được nhiều hơn nữa có thể đọc được, hơn tài liệu tham khảo kỳ lạ được ghi tên vào this trong phạm vi cao hơn

0

whats về

test.prototype.method02=function(){ 
    this.method01.apply(this); 
    // do some other stuff 
} 
Các vấn đề liên quan