이 글에서는 주로 자바스크립트 프로그래밍 디자인 패턴 중 생성자 패턴을 소개하는데, 생성자 패턴의 개념과 원리를 간략하게 설명하고, 생성자 패턴의 정의와 사용법을 예제 형식으로 분석해 봤습니다. . 모든 사람에게 도움이 되기를 바랍니다.
이 글에서는 자바스크립트 프로그래밍 디자인 패턴의 생성자 패턴을 예시와 함께 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
클래식 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!