że chcę utworzyć następujący API:Wykorzystaj nowe słowo kluczowe opcjonalnie
var api = function(){}
api.prototype = {
constructor: api,
method: function() {
return this;
}
};
Teraz to będzie działać jak:
var myApi = new api();
myApi.method();
Ale powiedzmy, że chcę, aby słowo kluczowe new
opcjonalne, tak, że będzie to działać:
api().method();
bym z mojej głowy robić:
var api = function() {
if (!(this instanceof api)) {
return new api();
}
};
Ale zastanawiałem się, czy można to w jakiś sposób zarażać, czy też istnieją inne niebezpieczeństwa związane z używaniem tej metody? Wiem, że f. Ex jQuery tego nie robi (odciążają konstruktora do metody prototypowej), więc jestem pewien, że istnieje dobry powód, aby tego nie robić. Po prostu ich nie znam.
Twoje rozwiązanie wygląda doskonale, widziałem, że jest używane w wielu miejscach. Zobacz [tutaj] (http://ejohn.org/blog/simple-class-instantiation/), na przykład. – bfavaretto