¿Hay algún beneficio al usar el prefijo 'ventana' al llamar variables o métodos de JavaScript en el objeto ventana? Por ejemplo, ¿llamar a 'window.alert' tendría una ventaja sobre simplemente llamar a 'alerta'? Me imagino que usar el prefijo podría dar un pequeño aumento de rendimiento cuando la llamada se realiza desde el interior de alguna función/objeto, sin embargo, rara vez veo esto en el código de las personas. De ahora en adelante esta pregunta.Beneficio de usar el prefijo 'ventana' en javascript
Respuesta
Dudo que haya algún beneficio medible en el rendimiento. Después de que toda la cadena de alcance fuera escaneada para el identificador window
primero, el objeto de ventana se escanearía para el artículo deseado. Por lo tanto, es más probable que sea determinante para el rendimiento.
El uso del prefijo de ventana es útil si tiene otra variable en el alcance que ocultaría el elemento que desea recuperar de la ventana. La pregunta es ¿siempre se puede saber cuándo podría ser? La respuesta es no. Entonces, ¿siempre deberías prefijar con la ventana? ¿Cómo se vería el código si hicieras eso? Feo. Por lo tanto, no lo hagas a menos que sepas que debes hacerlo.
¡No tenía idea de que la cadena de alcance se escaneara para ventana! Siempre pensé que Windows era una palabra clave reservada, y por lo tanto no sucedería. Gracias. –
La cadena de alcance realmente funciona al revés. Las variables locales anulan las globales. – superlukas
Imagino que el beneficio de rendimiento aquí es increíblemente insignificante en el mejor de los casos, si es que hay uno.
Solo importa si está utilizando marcos y haciendo un montón de llamadas javascript entre marcos, e incluso solo escenarios específicos requieren la necesidad de hacer referencia explícitamente a window
.
Cuando usa el prefijo, está explicitando que está utilizando la definición "global" de la variable, no una local. (No estoy seguro de si/cómo puede insertar variables en un ámbito en JS, excepto la rareza con este y los controladores de eventos en línea.) YMMV, puede preferir la claridad o encontrar que es un desorden.
Obtenido de Google (http://www.techotopia.com/index.php/JavaScript_Window_Object):
El objeto de la ventana es el objeto de nivel superior de la jerarquía de objetos. Como tal, cada vez que se hace referencia a un método o propiedad de objeto en un script sin el nombre del objeto y el prefijo de punto, JavaScript asume que es un miembro del objeto de ventana. Esto significa, por ejemplo, que cuando se llama al método window alert() para mostrar un cuadro de diálogo de alerta, aparece la ventana. el prefijo no es obligatorio. Por lo tanto, las siguientes llamadas a métodos lograr lo mismo:
window.alert()
alerta()
Sin embargo, he leído, pero no han tenido tiempo para probar lo siguiente de: (http://www.javascriptref.com/reference/object.cfm?key=20)
Sin embargo, un lugar donde tendrás que tener cuidado es en los controladores de eventos. Dado que los controladores de eventos están vinculados al documento, una propiedad de documento con el mismo nombre que una propiedad de ventana (por ejemplo, abrir) enmascarará la propiedad de ventana. Por este motivo, siempre debe usar la "ventana" completa. sintaxis al direccionar las propiedades de Ventana en los manejadores de eventos.
+1 informativo =) –
Esto es útil cuando se intenta probar valores de objetos globales.Por ejemplo, si GlobalObject
no se define a continuación, esto arroja un error:
if(GlobalObject) { // <- error on this line if not defined
var obj = new GlobalObject();
}
pero esto no arroja un error:
if(window.GlobalObject) { // Yay! No error!
var obj = new GlobalObject();
}
mismo modo con:
if(globalValue == 'something') // <- error on this line if not defined
if(window.globalValue == 'something') // Hurrah!
y:
if(globalObj instanceof SomeObject) // <- error on this line if not defined
if(window.globalObj instanceof SomeObject) // Yippee! window.prop FTW!
I w No debería esperar ver una diferencia significativa en el rendimiento, y la única otra razón por la que puede hacerlo es asegurarse de que está obteniendo un valor del alcance global (en caso de que el valor haya sido redefinido en el alcance actual).
En cuanto al rendimiento, creo que AnthonyWJones lo tiene cubierto.
Un uso del prefijo de ventana es hacer explícitamente algo disponible fuera del alcance actual. Si estuviera escribiendo código en una función de auto-invocando para no contaminar el ámbito global, pero había algo dentro que quería hacer disponible a nivel mundial, es posible hacer algo como lo siguiente:
(function(){
function foo(){
//not globally available
}
function bar(){
//not globally available
}
window.baz = function(){
//is globally available
foo();
bar();
};
})();
'baz = function() {/ * ... * /}' hace lo mismo, y no, AnthonyWJones no lo tiene cubierto. El estándar garantiza que habrá un beneficio de rendimiento mensurable (no solo en JS, sino también en idiomas como Lua), debido a cómo funcionan los ámbitos. – superlukas
- 1. ¿Cuál es el propósito/beneficio de usar parámetros ignorados en una función de JavaScript?
- 2. ¿Cómo usar el Prefijo de enlace?
- 3. Beneficio de usar UseSubmitBehavior en el botón asp.net
- 4. ¿Cuál es el principal beneficio de usar HashMap en Java?
- 5. ¿Hay algún beneficio real de usar J #?
- 6. ¿Cuál es el beneficio del Patrón de Módulos Javascript?
- 7. ¿Cuál es el beneficio de usar Antennahouse sobre Apache FOP?
- 8. ¿Cuál es el beneficio de usar out/ref versus returning?
- 9. ¿Hay algún beneficio real para usar el método javascript Array reduce()?
- 10. ¿Usar Javascript para abrir una ventana "maximizada" en IE6?
- 11. ¿Hay algún beneficio en minimizar JavaScript antes de descomprimirlo?
- 12. ¿Por qué veo las variables de JavaScript con el prefijo $?
- 13. ¿Hay algún beneficio al NO usar un CDN público para cargar bibliotecas de Javascript?
- 14. Establecer el prefijo del proveedor de CSS utilizando javascript
- 15. ¿Hay algún beneficio al usar SecureString en ASP.NET?
- 16. ¿Hay algún beneficio al usar HtmlHelper en MVC?
- 17. ¿Hay algún beneficio de usar un Inicializador de objetos?
- 18. Marcar el prefijo en las variables miembro. intellisense
- 19. AutoMapper con el prefijo
- 20. acceso al proveedor de prefijo -webkit- en JavaScript
- 21. ¿Puedo usar el prefijo com.google.code para mis paquetes?
- 22. ¿Hay algún beneficio de usar un método @static?
- 23. ¿Hay algún beneficio al usar prototipos en lugar de declarar propiedades en el objeto mismo?
- 24. ¿Cuál es el beneficio de usar alias de espacio de nombres en C#?
- 25. ¿Cuál es el beneficio de los recursos de Javascript en Eclipse?
- 26. ¿Puedo usar otro prefijo en lugar de `ng` con angularjs?
- 27. javascript llamando a una función en el objeto ventana
- 28. ventana Javascript objeto
- 29. ¿Cuál es el beneficio de \ n y PHP_EOL en PHP?
- 30. Capturar el evento cercano de la ventana emergente en JavaScript
alerta es una mala ejemplo, porque generalmente solo se llama una vez y no importa (generalmente) cuánto tiempo demora en mostrarse. – Nosredna