function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Se considera una buena práctica nombrar las funciones constructoras con una primera letra mayúscula.
En una función constructora this
no tiene un valor. Es un sustituto del nuevo objeto. El valor de this
se convertirá en el nuevo objeto cuando se crea un nuevo objeto.
El tutorial de JavaScript este
Los ejemplos de los capítulos anteriores son limitados. Sólo crean objetos individuales.
A veces necesitamos un "plan" para crear muchos objetos del mismo "tipo".
La forma de crear un "tipo de objeto" es utilizar una función constructora de objetos.
En el ejemplo anterior, función Persona()
es una función constructora de objetos.
Los objetos del mismo tipo se crean llamando a la función constructora con la palabra clave new
:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
En JavaScript, la palabra clave this
se refiere a un objeto.
Qué objeto depende de cómo se invoca (usa o llama) este
.
La palabra clave this
se refiere a diferentes objetos dependiendo de cómo se use:
En un método de objeto, este
se refiere al objeto.
Por sí solo, este
se refiere al objeto global.
En una función, this
se refiere al objeto global.
En una función, en modo estricto, este
es indefinido
.
En un evento, este
se refiere al elemento que recibió el evento.
Métodos como call()
, apply()
y bind()
puede referir este
a cualquier objeto.
este
no es una variable. Es una palabra clave. No puede cambiar el valor de this
.
El tutorial de JavaScript este
Agregar una nueva propiedad a un objeto existente es fácil:
myFather.nationality = "English";
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p id="demo"></p>
<script>
// Constructor function for Person objects
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
// Create 2 Person objects
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
// Add nationality to first object
myFather.nationality = "English";
// Display nationality
document.getElementById("demo").innerHTML =
"My father is " + myFather.nationality;
</script>
</body>
</html>
La propiedad se agregará a myFather. A mi madre no. (No a ninguna otra persona se opone).
Agregar un nuevo método a un objeto existente es fácil:
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p id="demo"></p>
<script>
// Constructor function for Person objects
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
// Create 2 Person objects
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
// Add a name method to first object
myFather.name = function() {
return this.firstName + " " + this.lastName;
};
// Display full name
document.getElementById("demo").innerHTML =
"My father is " + myFather.name();
</script>
</body>
</html>
El método se agregará a myFather. A mi madre no. (No a ninguna otra persona se opone).
No puedes agregar una nueva propiedad a un constructor de objetos de la misma manera que lo haces. agregar una nueva propiedad a un objeto existente:
Person.nationality = "English";
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p>You cannot add a new property to a constructor function.</p>
<p id="demo"></p>
<script>
// Constructor function for Person objects
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
// You can NOT add a new property to a constructor function
Person.nationality = "English";
// Create 2 Person objects
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
// Display nationality
document.getElementById("demo").innerHTML =
"The nationality of my father is " + myFather.nationality;
</script>
</body>
</html>
Para agregar una nueva propiedad a un constructor, debe agregarla al función constructora:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p id="demo"></p>
<script>
// Constructor function for Person objects
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
this.nationality = "English";
}
// Create 2 Person objects
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
// Display nationality
document.getElementById("demo").innerHTML =
"My father is " + myFather.nationality + ". My mother is " + myMother.nationality;
</script>
</body>
</html>
De esta forma, las propiedades de los objetos pueden tener valores predeterminados.
Su función constructora también puede definir métodos:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p id="demo"></p>
<script>
// Constructor function for Person objects
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
this.name = function() {
return this.firstName + " " + this.lastName
};
}
// Create a Person object
const myFather = new Person("John", "Doe", 50, "blue");
// Display full name
document.getElementById("demo").innerHTML =
"My father is " + myFather.name();
</script>
</body>
</html>
No puedes agregar un nuevo método a un constructor de objetos de la misma manera que agregas un nuevo método a un objeto existente.
Agregar métodos a un constructor de objetos debe realizarse dentro del función constructora:
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
La función changeName() asigna el valor de nombre al nombre de la persona. propiedad apellido.
myMother.changeName("Doe");
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p id="demo"></p>
<script>
// Constructor function for Person objects
function Person(firstName,lastName,age,eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
}
}
// Create a Person object
const myMother = new Person("Sally","Rally",48,"green");
// Change last name
myMother.changeName("Doe");
// Display last name
document.getElementById("demo").innerHTML =
"My mother's last name is " + myMother.lastName;
</script>
</body>
</html>
JavaScript sabe qué persona eres hablando "sustituyendo" esto por miMadre.
JavaScript tiene constructores integrados para objetos nativos:
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Object Constructors</h2>
<p id="demo"></p>
<script>
const x1 = new String(); // A new String object
const x2 = new Number(); // A new Number object
const x3 = new Boolean(); // A new Boolean object
const x4 = new Object(); // A new Object object
const x5 = new Array(); // A new Array object
const x6 = new RegExp(); // A new RegExp object
const x7 = new Function(); // A new Function object
const x8 = new Date(); // A new Date object
// Display the type of all objects
document.getElementById("demo").innerHTML =
"x1: " + typeof x1 + "<br>" +
"x2: " + typeof x2 + "<br>" +
"x3: " + typeof x3 + "<br>" +
"x4: " + typeof x4 + "<br>" +
"x5: " + typeof x5 + "<br>" +
"x6: " + typeof x6 + "<br>" +
"x7: " + typeof x7 + "<br>" +
"x8: " + typeof x8 + "<br>";
</script>
<p>There is no need to use new String(), new Number(), new Boolean(), new Array(), and new RegExp()</p>
<p>Use literals instead like: myArray = []</p>
</body>
</html>
El objeto Math()
no está en la lista. Math
es un objeto global. La palabra clave new
no se puede utilizar en Matemáticas
.
Como puede ver arriba, JavaScript tiene versiones de objetos de la primitiva tipos de datos Cadena
, Número
y Booleano
. Pero no hay razón para crear objetos complejos. Valores primitivos son mucho más rápidos:
Utilice cadenas literales ""
en lugar de new String()
.
Utilice números literales 50
en lugar de new Number()
.
Utilice literales booleanos true/false
en lugar de new Boolean()
.
Utilice literales de objeto {}
en lugar de new Object()
.
Utilice literales de matriz []
en lugar de new Array()
.
Utilice literales de patrón /()/
en lugar de new RegExp()
.
Utilice expresiones de función () {}
en lugar de new Function()
.
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
let x1 = ""; // string
let x2 = 0; // number
let x3 = false; // boolean
const x4 = {}; // Object object
const x5 = []; // Array object
const x6 = /()/; // RegExp object
const x7 = function(){}; // function
// Display the type of all
document.getElementById("demo").innerHTML =
"x1: " + typeof x1 + "<br>" +
"x2: " + typeof x2 + "<br>" +
"x3: " + typeof x3 + "<br>" +
"x4: " + typeof x4 + "<br>" +
"x5: " + typeof x5 + "<br>" +
"x6: " + typeof x6 + "<br>" +
"x7: " + typeof x7 + "<br>";
</script>
</body>
</html>
Normalmente, las cadenas se crean como primitivas: firstName="John"
Pero las cadenas también se pueden crear como objetos usando la palabra clave new
:
primer nombre=nueva cadena("John")
Descubra por qué las cadenas no deben crearse como objetos en el capítulo. Cadenas JS.
Normalmente, los números se crean como primitivos: x=30
Pero los números también se pueden crear como objetos usando la palabra clave new
:
Descubra por qué los números no deben crearse como objetos en el capítulo. Números JS.
Normalmente, los valores booleanos se crean como primitivos: x = falso
Pero los valores booleanos también se pueden crear como objetos usando la palabra clave new
:
x=nuevo booleano(falso)
Descubra por qué los valores booleanos no deben crearse como objetos en el capítulo. Booleanos JS.