Вы можете создать статический метод в функции конструктора, но только с использованием того же синтаксиса:
function Foo(){
Foo.bar = function (){...};
}
Но это только добавит статическийметод после вызова конструктора.Кроме того, он будет повторно добавлять его каждый раз, когда вызывается конструктор, что кажется расточительным, но я думаю, что это может быть полезно, например:
function Foo() {
var counter = (Foo.bar && Foo.bar() || 0) + 1;
Foo.bar = function (){
return counter;
};
}
f = new Foo();
Foo.bar(); // 1
f2 = new Foo();
Foo.bar(); // 2
В этом случае bar
обновляется для возвратаколичество вызовов Foo
- возможно, здесь есть разумный вариант, который может отслеживать все экземпляры полезным способом.
Если вы по какой-то причине не хотите ссылаться на Foo
, вы можете быть умным и сделать что-то вроде этого:
var Foo = (function Private(){
Private.bar = function (){...};
});
Опять же, это работает только после того, как Foo
был вызван хотя бы один раз.Кроме того, хотя это демонстрирует альтернативный синтаксис, мне очень трудно представить, когда вы, возможно, захотите его использовать.
Еще один вариант здесь, вероятно, в равной степени бесполезен:
function Foo() {
this.constructor.bar = function (){
console.log("test");
};
}