Ideas/conceptos claves
this
es una palabra reservada generalmente para especificar el contexto en el cual se está ejecutando
Apuntes
- Todos los lenguajes de programación tienen tipos y estructuras de datos
- String - cadenas de texto
- Números
- Booleanos
- Listas
- Casi todos los lenguajes de programación tienen listas
- PHP no es la excepción tenemos las listas de toda la vida
$students_platzi_rank = [
"Juan",
"Juanita",
"Nath",
"Nora",
"Luisa"
]
- Aparte en PHP tenemos los arrays asociativos, En vez de acceder por su posición podemos acceder por un nombre clave
$students_platzi_rank = [
"Juan" => 110,
"Juanita" => 300,
"Nath" => 700,
"Nora" => 150,
"Luisa" => 0,
]
- En Python tenemos los diccionarios aparte de las listas, que son un conjunto de datos que podemos acceder a través de una clave, es decir funcionan a partir de clave - valor
students_platzirank = {
'Juan': 110,
'Juanita': 130,
'Nora': 310,
'Luisa': 300,
}
- En JavaScript igual tenemos este tipo de lista, muy similar a los diccionarios en Python, esto es conocido como objetos literales en JavaScript
students_platzirank = {
'Juan': 110,
'Juanita': 130,
'Nora': 310,
'Luisa': 300,
}
- Los objetos literales no son lo mismo que las instancias
- Cuando hablamos de programación orientada a objetos funcionan a partir de clases - objetos
- Pero los objetos literales no son los mismos que los de la programación orientada a objetos
Clases
PHP
class Student {
public $name = 'Nombre';
public $age = 18;
public $points = 750;
}
$juanita = new Student;
Phyton
class Student
name = 'Nombre'
age = 18
points = 750
juanita = Student();
Javascript
- Si bien JavaScript está orientado a objetos, no está basado en clases, sino en prototipos, un prototipo básico es el siguiente:
function Student() {
this.name = 'Nombre';
this.age = 18;
this.points = 750;
}
const juanita = new Student();
- Esta función tiene características importantes como:
- Estamos utilizando
this
para guardar nuestros atributos
- Cuando llamamos a esta función estamos utilizando la palabra reservada
new
con el propósito de crear una nueva instancia
Comparación entre un Objeto literal vs Objeto de una instancia
- La diferencia más marcada es que el objeto que es una instancia de un prototipo está etiquetado como instancia de
Student
Prototype
- Si expandimos
__proto__
desde cualquier objeto literal, podemos ver que está repleto de métodos
- Podemos acceder a todos estos métodos desde nuestros objetos literales sin necesidad de entrar al atributo
__proto__
- Por ejemplo si deseamos utilizar
hasOwnProperty
de un objeto literal, no es necesario escribir __proto__
aparte que nunca definimos hasOwnProperty
natalia.hasOwnProperty("name");
- No solo pasa con los objetos sino que también con los
arrays
- Siempre que creamos un array tendremos
__proto__
¿De dónde sale __proto__
?
- Cuando creamos un objeto literal o array nos indica en la propiedad
__proto__
que es una instancia tanto de Object
o Array
- JavaScript por dentro tiene prototipos por defecto entre ellos se encuentran:
- Lo que hace JS, cuando escribimos
[]
o {}
lo convierte por trasfondo a instancias de nuestras variables
- Por lo cual cuando definimos siempre aparecerán
- Nosotros también podemos crear prototipos, pero al crear instancias de un prototipo no solo recibimos sus métodos y atributos del mismo, sino que también recibimos de
Object
- En sí al definir un objeto literal no es instancia de ningún prototipo que nosotros hayamos definido sino que es instancia de
Object
el cual viene por defecto
<aside>
📌 RESUMEN: Un objeto en JavaScript es una instancia del prototipo nativo de JS Object
al igual que sucede con los arrays
los cuales son instancias de otro prototipo nativo de JavaScript llamado Array
. Al crear un nuevo prototipó implícitamente al crearse también heredará el prototipo de Object
</aside>