Javascript에서 객체를 생성하는 다양한 방법

6680 단어 javascript
Javascript에서 객체를 생성하는 방법에는 여러 가지가 있습니다. 하나씩 살펴보겠습니다.

객체 리터럴



한 번 발생하는 데이터를 저장하는 데 자주 사용됨

const person = {
  name: "John",
  age: 50,
  birthday() {
    this.age++
  }
}
person.birthday() // person.age === 51


건설자



클래스의 다른 인스턴스가 영향을 줄 수 없는 자체 데이터가 있는 개체의 여러 인스턴스를 만들어야 할 때 종종 사용됩니다. new 연산자는 생성자를 호출하기 전에 사용해야 합니다. 그렇지 않으면 전역 개체가 변경됩니다.

function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.birthday = function() {
  this.age++
}
const person1 = new Person("John", 50)
const person2 = new Person("Sally", 20)
person1.birthday() // person1.age === 51
person2.birthday() // person2.age === 21


공장 기능



생성자와 유사한 새 객체를 생성하지만 클로저를 사용하여 비공개 데이터를 저장할 수 있습니다. 함수 또는 this 키워드를 호출하기 전에 new를 사용할 필요도 없습니다. 팩토리 함수는 일반적으로 프로토타입 개념을 버리고 모든 속성과 메서드를 개체의 고유한 속성으로 유지합니다.

const createPerson = (name, age) => {
  const birthday = () => person.age++
  const person = { name, age, birthday }
  return person
}
const person = createPerson("John", 50)
person.birthday() // person.age === 51


객체.생성()



새로 생성된 객체의 프로토타입을 설정합니다.

const personProto = {
  birthday() {
    this.age++
  }
}
const person = Object.create(personProto)
person.age = 50
person.birthday() // person.age === 51


정의할 새 속성에 대한 설명자 역할을 하는 Object.create()에 두 번째 인수를 제공할 수도 있습니다.

Object.create(personProto, {
  age: {
    value: 50,
    writable: true,
    enumerable: true
  }
})


결론


  • 프로토타입은 다른 개체가 속성과 메서드를 상속하는 개체입니다.
  • 팩토리 함수는 클로저를 통해 개인 속성과 메서드를 제공하지만 트레이드 오프로 메모리 사용량을 늘리는 반면 클래스는 개인 속성이나 메서드가 없지만 단일 프로토타입 개체를 재사용하여 메모리 영향을 줄입니다.
  • 좋은 웹페이지 즐겨찾기