【JavaScript】- Varias formas de crear objetos

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 newel 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 Personinstancia , newse debe utilizar el operador. Llamar al constructor de esta manera pasa por los siguientes 4 pasos. ¿Qué hace exactamente new ?

  1. Crear un nuevo objeto (el constructor es para inicializar el objeto)

  2. Asigne el alcance del constructor al nuevo objeto (asigne la dirección del objeto creado a este en el constructor)

  3. Ejecute el código en el constructor (llame al constructor para agregar miembros al objeto)

  4. Devuelve un nuevo objeto (devuelve la dirección de este a obj)

Los constructores deben usarse con newel 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 saymétodo

  1. Resuelve la desventaja de desperdiciar memoria

  2. 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 

Supongo que te gusta

Origin blog.csdn.net/m0_55960697/article/details/124001274
Recomendado
Clasificación