2012-08-30 27 views
5

hãy chạy đoạn mã sau và xem những gì đang xảy ra trong JS console:Làm thế nào để tái xác định một phương pháp trong "lớp javascript" một

Câu hỏi của tôi là liên quan đến dòng cuối cùng trong đoạn:

  1. Tại sao F.prototype.method; thay đổi?
  2. Tôi nên xác định lại Fcustom.prototype.method để không thay đổi F.prototype.method như thế nào?

Lưu ý: Tôi đang sử dụng jQuery và gạch dưới để mở rộng chức năng.


  • đoạn mã kiểm tra:

    var F = function() {}; 
    F.prototype.method = function() { 
        // some code 
    } 
    
    F.prototype.method; // it shows "some code" 
    
    
    Fcustom = $.extend(true, F, {}); 
    
    _.extend(Fcustom.prototype, { 
    method: function() { 
        // other code 
        } 
    }); 
    
    Fcustom.prototype.method; // it shows "other code" 
    
    F.prototype.method; // it shows "other code" instead of "some code" Why? 
    
+1

Bạn có muốn sao chép hàm 'F' sang' Fcustom' không? – pimvdb

+0

Thật không may bạn không thể sao chép các chức năng ... –

Trả lời

3
var obj = { myMethod : function() { 
       //some code 
      } 
}; 

var newObj = $.extend(true, {}, obj); 

newObj.myMethod = function(){  
    //new method 
}; 

newObj.myMethod(); //should call the new method 

Trong khi,

obj.myMethod(); //still calls the old "//some code" 

DEMO:

+0

Tôi nghĩ bạn có ý định hoán đổi các đối số thành '$ .extend'. – pimvdb

+0

@pimvdb: Tóm lại. Vâng. Nhưng nó nghĩ rằng nó sẽ là tốt hơn để chứng minh rằng đối số đầu tiên ** là mục tiêu của sự thay đổi **. Trong khi bản gốc vẫn còn nguyên vẹn. Tất cả đều không trực tiếp giả mạo với 'nguyên mẫu'. –

+0

Tôi hiểu nhưng nhận xét cuối cùng của bạn về đoạn trích đầu tiên không chính xác, tôi sợ. – pimvdb

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