¿Los métodos y prototipos que son funciones se alzan en JavaScript?

Aveces si aveces no…
… porque las declaraciones de funciones se izan pero las expresiones de funciones no.

Pero no importa
… porque un método no existe significativamente hasta que una función se vincula a un objeto. De hecho, un método es solo una propiedad cuyo valor es una referencia de función.

Tienes dos formas básicas de configurar esto:

// ... some other code obj.method(); // TypeError: method is not a function obj.method = function() { // ... }; obj.method(); // works 

-o-

 // ... some other code obj.method(); // TypeError importantAction(); // works obj.method = importantAction; obj.method(); // works // Define the function which becomes a method. function importantAction() { // ... } 

En ambos casos, la función que está vinculando como método estará disponible tan pronto como se ejecute la línea que une. En el segundo caso, la función estará disponible antes porque su declaración se levantó, pero el obj.method se definirá hasta que importantAction se obj.method al objeto. La expresión que define obj.method en el caso 1 no se iza, pero realmente no hace una diferencia ya que el método no está disponible hasta method se crea una clave llamada method y se le da un valor. Intentar usar una propiedad que sabes que no está definida siempre va a estar mal.

Los mismos principios se aplican a los métodos de los prototipos, pero establecer una función como el prototipo de su objeto provoca un comportamiento bastante específico (como hacerlo invocable) que podría no esperar. Mientras eso sea lo que quería, y haya configurado a los padres antes de tener hijos, el proceso de elevación no debería darle ningún problema adicional. Los padres y los niños pueden tener sus propios problemas locales, pero si esos problemas comienzan a cruzar el puente prototipo, entonces es posible que desee echar un vistazo a su diseño.