Estoy aprendiendo sobre propiedades heredadas y estoy bastante confundido. Agradecería mucho su ayuda para aclararme un poco.
Entonces, una propiedad heredada es una propiedad que el objeto hereda del objeto prototipo.
Un artículo que leí dio un ejemplo de una propiedad heredada: "cada objeto JavaScript hereda la propiedad toString de su objeto prototipo"
Entonces, mi pregunta es: ¿Son todas estas propiedades heredadas?
Métodos estáticos
Objeto.assign()
Objeto.crear()
Objeto.defineProperty()
Objeto.defineProperties()
Objeto.entradas()
Objeto.congelar()
Objeto.fromEntries()
Objeto.getOwnPropertyDescriptor()
Objeto.getOwnPropertyDescriptors()
Objeto.getOwnPropertyNames()
Objeto.getOwnPropertySymbols()
Objeto.getPrototypeOf()
Objeto.es()
Objeto.esExtensible()
Objeto.está congelado()
Objeto.está sellado()
Objeto.claves()
Objeto.prevenirExtensiones()
Objeto.sello()
Objeto.setPrototypeOf()
Objeto.valores()
Propiedades de instancia
Objeto.prototipo.constructor
Objeto.prototipo. prototipo
Métodos de instancia
Objeto.prototipo. defineGetter ()
Objeto.prototipo. defineSetter ()
Objeto.prototipo. buscarGetter ()
Objeto.prototipo. Setter de búsqueda ()
Objeto.prototipo.hasOwnProperty()
Objeto.prototipo.isPrototypeOf()
Objeto.prototipo.propiedadIsEnumerable()
Objeto.prototipo.toLocaleString()
Objeto.prototipo.toString()
Objeto.prototipo.valorDe()
(Encontré esta lista de objetos MDN, son métodos estáticos, propiedades de instancia y métodos de instancia de objetos, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object )
Y entonces, ¿eso significa que todos los objetos tienen las propiedades anteriores?
Y dado que las funciones son básicamente objetos, ¿las funciones también las heredaron?
Además, ¿hay algún lugar donde pueda encontrar la lista de todas las propiedades heredadas que tienen los objetos?
¡Muchas gracias de antemano! lo siento por la publicación larga.
Los métodos estáticos no se pueden heredar porque existen en la clase y no en ninguna instancia de una clase. Así que esos están fuera. ¡Los otros métodos, absolutamente! Al menos eso pienso. Hagamos algunos experimentos y verifiquemos los resultados.
const f = () => { return "hello world" }; f.foo = "bar"; console.log(f.constructor); console.log(f.toString()); console.log(f.valueOf()); console.log(f.hasOwnProperty("foo")); console.log(f.hasOwnProperty("frankincense"));Este fragmento indica que, sí, de hecho, las funciones heredan los métodos no estáticos, porque las funciones son objetos... mientras Crockford se revuelve en su tumba.
Los métodos estáticos pertenecen solo a la clase Object (función constructora), lo que significa que solo puede llamarlos haciendo Object.nameOfMethod() .
Las propiedades y métodos de instancia, por otro lado, son heredados por todas las instancias de Object, lo que significa que cada objeto heredará esos accesorios/métodos.
Ahora recuerda que en JS cada entidad, si no es una primitiva, es un objeto.
Por ejemplo una matriz:
const arr = ["hello"] console.log(typeof arr) // object console.log(arr instanceof Object) // true console.log(Array.prototype.isPrototypeOf(arr)) // true console.log(arr.propertyIsEnumerable(0)) // true console.log(arr.toLocaleString()) // hello console.log(arr.valueOf()) // ["hello"] console.log(arr.hasOwnProperty(0)) // true console.log(arr.toString()) // hello Esto se debe a que incluso si las matrices en JS son instancias de Array , también son instancias de Object , puede ver una matriz como un objeto especial donde los índices son claves:
const arr = { 0: "hello" }