2014-09-23 3 views
0

Можно ли определить метод, который привязан к функции конструктора, а не экземпляры конструкторов? Например:Определение методов в конструкторе

function Person() { 
//define a method 
} 

метод затем будет доступен на самом конструкторе, такие как:

Person.method() // calls the defined method 

и метод не будет доступен на любом экземпляре Конструктора:

var person = new Person(); 
person.method(); // undefined 
+2

'Person.method = function() {...}' – elclanrs

+0

Спасибо большое! – DevOtts

ответ

2

Да, вы можете просто определить его следующим образом:

function Person() { 
    // constructor initialization code here 
} 

// define static method 
Person.sayHi = function() { 
    console.log("hi"); 
} 

var bob = new Person(); 
Person.sayHi(); // works any time even before creating a Person object 
bob.sayHi();  // undefined method 

Функция - объект, который может иметь свои собственные свойства (метод - это просто свойство, которое является функцией). Поскольку эти свойства не находятся в прототипе, они не будут передаваться объектам, созданным из конструктора Person, но будут доступны из самого объекта функции конструктора Person.

Это, по сути, то, что другие языки называют статическими методами, поскольку они не связаны ни с каким экземпляром.

+0

Вы можете даже иметь поля свойств, например. 'Person.message =" hi ";', который используется Person.sayHi(). – user949300

+0

@ user949300 - yep, я использую свойства нефункционального конструктора для таких вещей, как счетчики идентификаторов объектов и т. Д., Если вам не нужна конфиденциальность, и они локальны для определенного типа объекта, но не для каждого экземпляра. – jfriend00

Смежные вопросы