객체를 생성하는 모드는 무엇입니까?

零下一度
풀어 주다: 2017-06-26 11:29:27
원래의
1505명이 탐색했습니다.

1 new Object()

먼저 Object 인스턴스를 생성한 다음 여기에 속성과 메소드를 추가하세요.

var Person = new Object()
Person.name = 'hl'
Person.sayName = function () {
  console.log(this.name)
}
로그인 후 복사

2 객체 리터럴 메소드

객체 리터럴 메소드는 객체를 생성하는 가장 빠르고 편리한 방법이며 많은 곳에서 사용됩니다. 시나리오.

var Person = {
  name: 'hl',
  sayName: function () {
    console.log(this.name)
  }
}
로그인 후 복사

객체 리터럴 방식의 단점은 동일한 유형의 객체를 여러 개 생성할 때 중복 코드가 많이 생성되므로 팩토리 패턴이 발생한다는 것입니다.

3 팩토리 패턴

팩토리 패턴은 함수를 사용하여 객체 생성의 세부 사항을 캡슐화합니다. 함수를 호출할 때 객체 속성을 전달한 다음 객체를 반환합니다.

function createPerson (name) {
  return {
    name: name,
    sayName: function () {
      console.log(this.name)
    }
  }
}
var person = createPerson('hl')
var person = new createPerson('hl') // 寄生构造函数模式
로그인 후 복사

new 연산자를 사용해도 동일한 결과를 얻을 수 있습니다. 이 메서드를 기생 생성자 패턴이라고 하며 함수를 직접 호출하는 것과 다르지 않습니다.
팩토리 패턴은 동일한 유형의 여러 객체를 생성하는 문제를 해결하지만 객체의 특정 유형을 식별할 수는 없습니다.

4 생성자 패턴

생성자를 통해 생성된 객체의 경우, instanceof 연산자를 사용하여 객체의 유형을 결정할 수 있습니다. 프로그래밍 관례에 따라 생성자 이름은 일반 함수와 구별하기 위해 대문자로 표시되어야 합니다.

R
function Person (name) {
  this.name = name
  this.sayName = function () {
    console.log(this.name)
  }
}
p = new Person('hl')
p instanceof Person // true
로그인 후 복사
造 구성 함수의 특징:

  • 표시되는 생성 개체가 없습니다.

  • 속성과 메서드가 여기에 직접 할당됩니다.

  • RETURN 문이 없습니다.

  • NEW 연산자를 사용하여 개체를 만듭니다.

Construction

Construction


함수의 단점은 각 메서드가 인스턴스마다 다시 생성되어 메모리 낭비가 발생한다는 것입니다.

5 프로토타입 패턴

프로토타입 패턴을 사용하면 객체에 속성과 메서드를 쉽게 추가할 수 있습니다.

function Person () {
}
var p = new Person()
Person.prototype.name = 'hl'
Person.prototype.sayName = function () {
  console.log(this.name)
}
p.sayName() // hl
로그인 후 복사

프로토타입은 동적입니다. 즉, 객체가 먼저 생성된 다음 프로토타입이 수정되고 인스턴스도 해당 속성과 메서드를 얻을 수 있습니다.

프로토타입 패턴에는 단점이 있습니다. 첫째, 프로토타입 패턴은 초기화 매개변수를 전달할 수 없으므로 각 인스턴스가 동일한 속성을 얻습니다. 둘째, 참조 유형 값의 경우 아래 예를 참조하세요.

function Person () {
}
Person.prototype.relative = ['father','mother']

var person1 = new Person()
var person2 = new Person()
person1.relative.push('sister')
console.log(person2.relative) // [ 'father', 'mother', 'sister' ]
로그인 후 복사

person1의 속성을 수정하면 person2의 속성도 수정됩니다. 인스턴스는 일반적으로 고유한 속성을 가져야 하므로 프로토타입 패턴은 단독으로 사용되는 경우가 거의 없습니다.

6 생성자 패턴과 프로토타입 패턴을 조합하여 사용하기

객체를 생성하는 가장 일반적인 방법은 생성자 패턴과 프로토타입 패턴을 조합하여 사용하는 것입니다. 생성자는 사용자 정의 속성에 사용되며 프로토타입 패턴은 공유 속성 및 메서드를 정의하는 데 사용됩니다.

function Person (name) {
  this.name = name
}
Person.prototype.sayName = function () {
  console.log(this.name)
}
로그인 후 복사

7 동적 프로토타입 패턴

프로토타입은 객체 생성 프로세스를 더 잘 캡슐화하기 위해 생성자에서 초기화될 수 있습니다.

function Person(name) {
  this.name = name
  if (typeof this.sayName !== 'function') {
    Person.prototype.setName= function (name) {
      this.name = name
    }
    Person.prototype.sayName = function () {
      console.log(this.name)
    }
  }
}
로그인 후 복사
if로 모든 속성이나 메서드를 확인하는 대신 프로토타입이 초기화된 후에 존재해야 하는 속성이나 메서드 중 하나만 확인하세요. 🎜🎜8 안전한 생성자 패턴🎜🎜안전한 객체는 공용 속성이 없고 해당 속성과 메서드가 이 객체를 참조하지 않으며 객체를 생성하는 데 new 연산자가 사용되지 않음을 의미합니다. 데이터 수정을 방지하기 위해 보안이 필요한 일부 환경에서 사용하기에 적합합니다. 🎜
function Person (name) {
  return {
    sayName: function () {
      console.log(name)
    }
  }
}
var person = Person('hl')
로그인 후 복사
🎜안전 모드에서 생성된 개체는 생성자에 정의된 메서드를 사용하는 것 외에는 생성자에 전달된 원본 데이터를 수정하고 액세스할 수 있는 방법이 없습니다. 🎜

위 내용은 객체를 생성하는 모드는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿