/ / " s t r i n g " t y p e o f 4 2 ; / / " n u m b e r " t y p e o f t r u e ; / / " b o o l e a n " t y p e o f u n d e f i n e d ; / / " u n d e f i n e d " t y p e o f n u l l ; / / " o b j e c t " t y p e o f { } ; / / " o b j e c t " t y p e o f f u n c t i o n ( ) { } ; / / " f u n c t i o n " / / l a s f u n c i o n e s s o n u n s u b t i p o d e " o b j e c t " , C a l l e a b l e O b j e c t s
" b a z " ; f u n c t i o n b a r ( ) { v a r f o o = " b a z " } f u n c t i o n b a z ( f o o ) { f o o = " b a m " ; b a m = " Y e a h ! " } b a r ( ) ; b a z ( 2 ) ; c o n s o l e . l o g ( f o o ) ; / / " b a z " c o n s o l e . l o g ( b a m ) ; / / " Y e a h ! " LHS(OBJETIVO DE LA ASIGNACION), RHS(FUENTE DE LA ASIGNACION)
c o n s o l e . l o g ( a ) ; / * - - - - - - - - - - - - - - - - - - - - - - * / v a r a ; a = 2 ; c o n s o l e . l o g ( a ) ; / / 2 c o n s o l e . l o g ( a ) ; v a r a = 2 ; / * - - - - - - - - - - - - - - - - - - - - - - * / v a r a ; c o n s o l e . l o g ( a ) ; / / u n d e f i n e d a = 2 ;
a su contexto de ejecución actual, llamado THIS El keyword this siempre referencia a un objeto de los que se puedan obtener propiedades, no a alguna primitiva La decisión de a que objeto referencia el keyword "this" se hace en tiempo de ejecucion, al momento del llamado de la funcion.
referencia al objeto global* implicit binding: la funcion fue llamada dentro de un objeto contenedor explicit binding: fue llamada con .call() o .apply() la funcion fue llamada con el new keyword
f o o ( ) { c o n s o l e . l o g ( t h i s . a ) ; } v a r a = 2 ; f o o ( ) ; / / 2 f u n c t i o n f o o ( ) { " u s e s t r i c t " ; c o n s o l e . l o g ( t h i s . a ) ; } v a r a = 2 ; f o o ( ) ; / / t y p e E r r o r
f o o ( ) { c o n s o l e . l o g ( t h i s . a ) ; } v a r o b j 2 = { a : 4 2 , f o o : f o o } ; v a r o b j 1 = { a : 2 , o b j 2 : o b j 2 } ; o b j 1 . o b j 2 . f o o ( ) ; / / 4 2 v a r b a r = o b j . f o o ; / / f u n c t i o n r e f e r e n c e / a l i a s ! v a r a = " o o p s , g l o b a l " ; / / ` a ` a l s o p r o p e r t y o n g l o b a l o b j e c t b a r ( ) ; / / " o o p s , g l o b a l "
f o o ( ) { c o n s o l e . l o g ( t h i s . a ) ; } v a r o b j = { a : 2 } ; f o o . c a l l ( o b j ) ; / / 2 / * . c a l l ( ) & . a p p l y ( ) h a c e n l o m i s m o , c a m b i a l a f o r m a d e e n v i a r l o s p a r a m e t r o s * /
S o m e t h i n g ( ) { t h i s . n a m e = " R i c h a r d " } s o m e t h i n g = n e w S o m e t h i n g ( ) ; c o n s o l e . l o g ( s o m e t h i n g . n a m e ) ; / / " R i c h a r d "
linkeado al prototipo de la funcion (Un objeto) El objeto recien creado es atado como el "this" para es llamado de esa funcion El llamado a la funcion retorna el objeto recientemente construido
cuando la funcion es ejecutada fuera de ese scope lexico. f u n c t i o n f o o ( ) { v a r b a r = " b a r " ; f u n c t i o n b a z ( ) { c o n s o l e . l o g ( b a r ) ; } b a m ( b a z ) ; } f u n c t i o n b a m ( f n ) { f n ( ) ; / / " b a r " } f o o ( ) ;
P e r s o n a ( n o m b r e ) { v a r n o m b r e = n o m b r e ; f u n c t i o n h a b l a ( ) { c o n s o l e . l o g ( " H o l a , h o l a , m i n o m b r e e s " + n o m b r e ) ; } f u n c t i o n s e t N o m b r e ( n ) { n o m b r e = n ; } r e t u r n { h a b l a : h a b l a } } v a r r i c h a r d = P e r s o n a ( " R i c h a r d " ) ;
F o o ( w h o ) { t h i s . m e = w h o ; } F o o . p r o t o t y p e . i d e n t i f y = f u n c t i o n ( ) { r e t u r n " I a m " + t h i s . m e ; } ; f u n c t i o n B a r ( w h o ) { F o o . c a l l ( t h i s , w h o ) ; } B a r . p r o t o t y p e = O b j e c t . c r e a t e ( F o o . p r o t o t y p e ) ; B a r . p r o t o t y p e . c o n t r u c t o r = B a r , B a r . p r o t o t y p e . s p e a k = f u n c t i o n ( ) { a l e r t ( " H e l l o , " + t h i s . i d e n t i f y ( ) + " . " ) ; } ; v a r b 1 = n e w B a r ( " b 1 " ) ; v a r b 2 = n e w B a r ( " b 2 " ) ; b 1 . s p e a k ( ) ; / / a l e r t s : " H e l l o , I a m b 1 . " b 2 . s p e a k ( ) ; / / a l e r t s : " H e l l o , I a m b 2 . "
n i t : f u n c t i o n ( w h o ) { t h i s . m e = w h o ; } , i d e n t i f y : f u n c t i o n ( ) { r e t u r n " I a m " + t h i s . m e ; } } ; v a r B a r = O b j e c t . c r e a t e ( F o o ) ; B a r . s p e a k = f u n c t i o n ( ) { a l e r t ( " H e l l o , " + t h i s . i d e n t i f y ( ) + " . " ) ; } ; v a r b 1 = O b j e c t . c r e a t e ( B a r ) ; b 1 . i n i t ( " b 1 " ) ; v a r b 2 = O b j e c t . c r e a t e ( B a r ) ; b 2 . i n i t ( " b 2 " ) ; b 1 . s p e a k ( ) ; / / a l e r t s : " H e l l o , I a m b 1 . " b 2 . s p e a k ( ) ; / / a l e r t s : " H e l l o , I a m b 2 . "