Me piensa, yo también metafórico y críptico con la respuesta anterior. Aclaración sigue
Una instancia de Array, Boolean, Date, Function, Number, RegExp, String es un objeto pero se ha mejorado con métodos y propiedades específicos para cada tipo. Por ejemplo, una matriz tiene una propiedad predefinida length
, mientras que los genéricos no.
javascript:alert([].length+'\n'+{}.length)
pantallas
0
undefined
Intrínsecamente, el intérprete FF Gecko también distingue entre matrices y genéricos Los objetos con distintas diferencias que evalúan las construcciones del lenguaje.
javascript:
ra=[ "one", "two", "three"]; ra.a=4;
ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
alert(
ra +"\n\n"+
ob +"\n\n"+
ra.toSource() +"\n\n"+
ra.a +"\t .toSource() forgot me! \n\n"+
ra.length +"\t and my length! \n\n"+
ob.toSource());
ps=""; for(i in ra)ps+=i+" "; alert(ps); /* NB .length is missing! */
ps=""; for(i in ob)ps+=i+" "; alert(ps);
mostrando
one,two,three
[object Object]
["one", "two", "three"]
4 .toSource() forgot me!
3 and my length!
({0:"one", 1:"two", 2:"three", a:4})
y 0 1 2 a
y 0 1 2 a
.
En cuanto a la afirmación de que todos los objetos son funciones:
No es ni sintácticamente ni semánticamente correcta de utilizar una instancia de objeto arbitrario como una función como 123()
o "abc"()
o []()
o {}()
o obj()
donde obj
es cualquier tipo distinto de Function
, por lo que un objeto arbitrario INSTANCE no es Function
. Sin embargo, dado un objeto obj
y su tipo es Array, Boolean, Date, ...
, ¿cómo llegó obj
a ser Array, Boolean, Date, ...
? ¿Qué es un Array, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n'));
pantallas
function Array() {
[native code]
}
function Boolean() {
[native code]
}
function Date() {
[native code]
}
function Function() {
[native code]
}
function Number() {
[native code]
}
function Object() {
[native code]
}
function RegExp() {
[native code]
}
function String() {
[native code]
}
En todos los casos, sin equívocos, el tipo de objeto se manifiesta como una definición function
, por lo tanto, la afirmación de que todos los objetos son funciones! (¡La ironía es que intencionalmente oscurecí y borré la distinción de una instancia de objeto con la de su tipo! Aún así, esto muestra "no se puede tener una sin la otra", ¡Objeto y función! La mayúscula enfatiza el tipo como se opusieron a la instancia.)
Tanto un paradigma funcional y el objeto parece ser fundamental para la programación y ejecución de las primitivas incorporadas JS intérprete de bajo nivel, tales como Math
y JSON
y true
.
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
pantallas
[object Math]
[object JSON]
(new Boolean(true))
En el momento de la elaboración de Javascript, un estilo de programación centrada en el objeto (de la POO - Orientado a Objetos estilo de programación - el "'s" es mi propio juego de palabras !) estaba en boga y el intérprete fue bautizado de manera similar con Java para darle mayor credibilidad. Las técnicas de programación funcional fueron relegadas a exámenes más abstractos y esotéricos que estudian las teorías de Autómatas, Funciones Recursivas, Lenguajes Formales, etc. y como tales no son tan apetecibles. Sin embargo, las fortalezas de estas consideraciones formales se manifiestan claramente en Javascript, particularmente cuando se implementan en el motor Gecko de FF (es decir, .toSource()
).
La definición del objeto para la función es particularmente satisfactoria ya que se define como una relación de recurrencia! ¡definido usando su propia definición!
function Function() { [native code] }
y puesto que una función es un objeto del mismo sentimiento se mantiene para
function Object() { [native code] }
.
La mayoría de las otras definiciones son inactivas a un valor de terminal estático. Sin embargo, eval()
es una primitiva particularmente potente y, por lo tanto, una cadena también puede incorporar funciones arbitrarias.
Nota nuevamente, la vernácula utilizada anteriormente oscurece el tipo de objeto y la distinción de instancia.
myArray.length devuelve un índice numérico/clave del último elemento de la matriz, pero no el número real de elementos. ¿Las propiedades del objeto Array no son lo mismo que los valores de matriz? –
Solo intentaba ilustrar la semántica pretendida del objeto Array si se trata de un objeto normal. El artículo vinculado hace un mejor trabajo :) –
La próxima vez que alguien diga que JavaScript es un buen lenguaje para desarrollar, le mostraré esta muestra. Gracias. –