2016-05-11 21 views
5

Tôi muốn biết nếu mở rộng mẫu thử nghiệm của một chức năng động là một thực hành xấu. Tôi đang xem xét để làm điều này bằng cách sử dụng một phương pháp tĩnh mà nhận được tên tài sản và chức năng để thêm vào nguyên mẫu.JavaScript: đang mở rộng mẫu thử nghiệm động một cách không thực tế?

Đó có phải là thực tiễn không tốt?

function Test() { 
    this.condition = false; 
} 

Test.extend = function(id, task) { 
    this.prototype[id] = function() { 
     return task.apply(this, arguments); 
    }; 
}; 
+7

Chỉ khi bạn lạm dụng nó đến mức mà việc theo dõi là khó khăn (mà, thẳng thắn, thường là những gì sẽ xảy ra). Cá nhân, tôi không muốn đạt đến cấp độ meta đó trong lập trình của mình. –

+0

Đó là một thực tế xấu vì mã của bạn không hoạt động :-) Nó sẽ cần phải là 'nhiệm vụ' thay vì' this.task', và nên được rút ngắn thành 'this.prototype [id] = task;' – Bergi

+0

I ' m không chắc chắn nhưng tôi đoán có một số vấn đề hiệu suất với '.apply'. – Rajesh

Trả lời

0

Tôi có thể nói rằng thực hành không tốt trong trường hợp này, vì bạn không thể kiểm soát nếu phương thức [id] được thêm bị ghi đè từ bên trong lớp.

var test = new Test(); 
test.extend("example", function() { 
    console.log("First Method"); 
}); 

test.extend("example", function() { 
    console.log("Second Method"); 
}); 

Với cách mã của bạn, bạn không có cách nào biết khi nào phương thức đầu tiên bị ghi đè và do đó phá vỡ mã của bạn một cách ngẫu nhiên.

+0

Vâng, điều này có thể được giải quyết kiểm tra các phương pháp được thêm vào mẫu thử nghiệm trước khi thêm một cái mới. Nhưng nếu bạn có kiểm tra này, mở rộng các nguyên mẫu theo cách này là một thực tế xấu? – javascripter

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