>  기사  >  웹 프론트엔드  >  JavaScript 생성자 패턴 예시 분석

JavaScript 생성자 패턴 예시 분석

小云云
小云云원래의
2018-01-22 09:15:561436검색

이 글에서는 주로 자바스크립트 프로그래밍 디자인 패턴 중 생성자 패턴을 소개하는데, 생성자 패턴의 개념과 원리를 간략하게 설명하고, 생성자 패턴의 정의와 사용법을 예제 형식으로 분석해 봤습니다. . 모든 사람에게 도움이 되기를 바랍니다.

이 글에서는 자바스크립트 프로그래밍 디자인 패턴의 생성자 패턴을 예시와 함께 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

클래식 OOP 언어에서 생성자(생성자라고도 함)는 객체를 초기화하는 데 사용되는 특수 메서드입니다. JS에서는 모든 것이 객체이기 때문에 객체 생성자가 자주 언급됩니다.

객체 생성자는 지정된 유형(클래스)의 객체를 생성하는 데 사용되며 매개 변수를 받아 객체의 속성과 메서드를 초기화할 수 있습니다.

객체 생성

JS에서는 객체를 생성하는 데 일반적으로 사용되는 세 가지 방법이 있습니다.


//1, 推荐使用
var newObject = {};
//2,
var newObject = Object.create( null );
//3, 不推荐
var newObject = new Object();

그러나 이는 속성과 메서드 없이 세 개의 빈 객체만 생성합니다. 다음 네 가지 방법을 통해 객체의 속성과 메서드를 설정할 수 있습니다.


// ECMAScript 3 兼容的方式
// 1. 常规对象定义方式
//设置属性
newObject.someKey = "Hello World";
//获取属性
var key = newObject.someKey;
// 2. 方括号方式
// 设置属性
newObject["someKey"] = "Hello World";
//获取属性
var key = newObject["someKey"];
// 仅仅用于ECMAScript 5
// 3. Object.defineProperty
// 设置属性
Object.defineProperty(
 newObject, "someKey",
 { value: "for more control of the property's behavior",
  writable: true,
  enumerable: true,
  configurable: true
});
//可以通过下面的函数简化属性设置
var defineProp = function ( obj, key, value ){
  config.value = value;
  Object.defineProperty( obj, key, config );
};
// 使用方法
var person = Object.create( null );defineProp( person, "car", "Delorean" );
defineProp( person, "dateOfBirth", "1981" );
defineProp( person, "hasBeard", false );
// 4. Object.defineProperties
//设置属性
Object.defineProperties(
newObject,
{ "someKey": { value: "Hello World", writable: true },
 "anotherKey": { value: "Foo bar", writable: false }
});
// 3和4的获取属性方法同1,2.

기본 생성자

JS에는 클래스 개념이 없다는 것을 알고 있지만 생성자를 사용하여 객체 생성도 지원합니다.

[new] 키워드를 사용하면 함수가 생성자처럼 동작하여 자체 객체 인스턴스를 만들 수 있습니다.

기본 생성자 형식은 다음과 같습니다.


function Car( model, year, miles ) {
  //这里,this指向新建立的对象自己
  this.model = model;
  this.year = year;
  this.miles = miles;
  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}
//用法
// 建立两个car实例
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
// 输出结果
console.log( civic.toString() );
console.log( mondeo.toString() );

이것은 간단한 생성자 패턴입니다. 두 가지 주요 문제가 있습니다.

첫째, 상속하기 어렵습니다. 두 번째로 toString()은 모든 사람이 사용합니다. 인스턴스는 함수로 한 번 정의되므로 Car 유형의 모든 인스턴스에서 공유되어야 합니다.

프로토타입 생성자 사용

JS에는 좋은 기능이 있습니다: 프로토타입 [Prototype],

이를 사용하면 객체를 생성할 때 생성자 프로토타입의 모든 속성을 객체 인스턴스에서 얻을 수 있습니다.

이렇게 하면 여러 객체 인스턴스가 동일한 프로토타입을 공유할 수 있습니다.

이전 Car 예제를 다음과 같이 개선합니다.


function Car( model, year, miles ) {
  this.model = model;
  this.year = year;
  this.miles = miles;
}
Car.prototype.toString = function () {
  return this.model + " has done " + this.miles + " miles";
};
// 用法
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
//输出
console.log( civic.toString() );
console.log( mondeo.toString() );

위 예제에서 toString() 메서드는 여러 Car 객체 인스턴스에 의해 공유됩니다.

관련 권장 사항:

JavaScript 디자인 패턴 팩토리 패턴 및 생성자 패턴_javascript 기술

Node.js 디자인 패턴은 인코딩에 스트림을 사용합니다.

js 디자인 패턴의 구조적 플라이웨이트 패턴에 대한 간략한 소개

위 내용은 JavaScript 생성자 패턴 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.