Nói rằng tôi muốn tạo ra các API sau:Làm cho từ khoá mới không bắt buộc
var api = function(){}
api.prototype = {
constructor: api,
method: function() {
return this;
}
};
Bây giờ, điều này sẽ làm việc như:
var myApi = new api();
myApi.method();
Nhưng chúng ta hãy nói rằng tôi muốn làm cho từ khóa new
tùy chọn, để điều này sẽ hoạt động:
api().method();
Tôi sẽ ra khỏi đầu của tôi làm:
var api = function() {
if (!(this instanceof api)) {
return new api();
}
};
Nhưng tôi đã tự hỏi, điều này có thể dễ dàng bị lây nhiễm bằng cách nào đó, hoặc có những mối nguy hiểm khác xung quanh bằng cách sử dụng phương pháp này? Tôi biết rằng f.ex jQuery không làm điều này (chúng dỡ bỏ hàm tạo thành một phương thức nguyên mẫu), vì vậy tôi chắc chắn có lý do chính đáng để không làm điều này. Tôi chỉ không biết họ.
Giải pháp của bạn có vẻ hoàn toàn ổn, tôi đã thấy được sử dụng ở nhiều nơi. Xem [ở đây] (http://ejohn.org/blog/simple-class-instantiation/), ví dụ. – bfavaretto