1. Creación de constructor incorporado
Podemos new Object()
crearlo :
//在js中,对象有动态特性,可以随时的给一个对象增加属性或者删除属性。
let person = new Object()
person.name = 'Jack'
person.age = 18
person.sayName = function () {
console.log(this.name)
}
Contras: engorroso, cada propiedad debe agregarse.
2. Creación de objetos literales
let person = {
name: 'Jack',
age: 18,
sayName: function () {
console.log(this.name)
}
}
Desventaja: ¿Qué sucede si desea generar múltiples objetos en lotes? El código es redundante
3. Mejora simple: función de fábrica
// 我们可以写一个函数,解决代码重复问题:
function createPerson (name, age) { // 第一种写法
return {
name: name,
age: age,
sayName: function () {
console.log(this.name)
}
}
}
// 然后生成实例对象:
let p1 = createPerson('Jack', 18)
let p2 = createPerson('Mike', 18)
function setObj(name, age) { // 第二种写法
let obj = new Object()
obj.name = name
obj.age = age
return obj
}
let obj1 = setObj('jack', 20)
console.log(obj1);
Inconvenientes: Sin embargo, no soluciona el problema del reconocimiento de objetos, y los objetos creados son de tipo Objeto.
4. Continuar mejorando: Constructor
Un constructor es una función que instancia un objeto y debe usarse con new
el operador.
function Person (name, age) {
this.name = name
this.age = age
this.sayName = function () {
console.log(this.name)
}
}
var p1 = new Person('Jack', 18)
p1.sayName() // => Jack
var p2 = new Person('Mike', 23)
p2.sayName() // => Mike
Para crear una
Person
instancia ,new
se debe utilizar el operador. Llamar al constructor de esta manera pasa por los siguientes 4 pasos. ¿Qué hace exactamente new ?
Crear un nuevo objeto (el constructor es para inicializar el objeto)
Asigne el alcance del constructor al nuevo objeto (asigne la dirección del objeto creado a este en el constructor)
Ejecute el código en el constructor (llame al constructor para agregar miembros al objeto)
Devuelve un nuevo objeto (devuelve la dirección de este a obj)
Los constructores deben usarse con
new
el operador para que tengan sentido. La primera letra de los constructores generalmente está en mayúscula.
ten cuidado:
1. Si agrega manualmente el retorno del valor de retorno, si es un tipo básico, no afectará la función del constructor
2. Si se devuelve el objeto, se sobrescribirá
3. Si se elimina lo nuevo, se convertirá en una función ordinaria.
Desventajas de los constructores.
La mayor ventaja de usar el constructor es que es más conveniente para crear objetos, pero también tiene el problema de desperdiciar memoria:
function Person (name, age) {
this.name = name
this.age = age
this.type = 'human'
this.say = function () {
console.log('hello ' + this.name)
}
}
var person1 = new Person('lpz', 18)
var person2 = new Person('Jack', 16)
console.log(person1.say === person2.say) // => false
Solución: extraer el mismo say
método
Resuelve la desventaja de desperdiciar memoria
pero causó
污染全局变量
el problema de
// 提前将say 声明好
function say() {
console.log(this.name);
}
function createStudent(name, age) {
this.name = name;
this.age = age;
this.say = say
}
const obj = new createStudent("悟能", 83);
const obj1 = new createStudent("悟能1", 84);
console.log(obj.say === obj1.say); // true