Tôi muốn khỉ vá bản dựng của đối tượng 'Bộ điều khiển' này. Nhưng làm thế nào để khỉ vá chức năng của hàm tạo nên tôi vẫn có thể gọi hàm gốc? Đây là những gì tôi đã thử.Làm thế nào để khỉ vá một hàm xây dựng của đối tượng?
// original
function Controller() {
this._tag = 'div';
}
Controller.prototype.tag = function() {
console.log(this._tag);
}
var c = new Controller();
c.tag(); // -> 'div', as expected
// patch attempt
var original = Controller;
Controller = function() {
original.apply(this);
this._tag = 'patched'; // patch
}
var c = new Controller();
c.tag(); // no method tag, prototype appears wiped...
Toán tử nhóm xung quanh biểu thức hàm RHS là thừa. "Constructor" được khai báo bên trong một hàm khác, do đó bạn không thể truy cập nó từ bên ngoài (trừ khi mã bị thiếu làm cho nó trở thành thuộc tính của hàm ẩn danh bên ngoài hoặc một số đối tượng khác). Vì vậy, nếu bạn muốn "khỉ vá" các nhà xây dựng (bất cứ điều gì có nghĩa là), chèn mã nơi bạn có bình luận là cách duy nhất. – RobG
@RobG Nếu tò mò: http://en.wikipedia.org/wiki/Monkey_patch Nó khá thẳng về phía trước để khỉ vá một tài sản hoặc phương pháp, nhưng vì các hàm xây dựng chức năng tình trạng đặc biệt tôi đang thua lỗ. Bạn có thể chính xác rằng điều này là không thể, nhưng tôi không chắc chắn về lý do bạn nêu ra. Tôi sẽ cập nhật mẫu mã để phản ánh. –
đã thêm một mẫu mã tốt hơn. –