Home  >  Article  >  Web Front-end  >  JavaScript Constructor Pattern Example Analysis

JavaScript Constructor Pattern Example Analysis

小云云
小云云Original
2018-01-22 09:15:561502browse

This article mainly introduces the constructor pattern of JavaScript programming design pattern, briefly describes the concept and principle of the constructor pattern, and analyzes the definition and usage of the constructor pattern in the form of examples. Friends in need can refer to it. I hope Can help everyone.

The examples in this article describe the constructor pattern of JavaScript programming design patterns. Share it with everyone for your reference, the details are as follows:

In the classic OOP language, the constructor (also called the constructor) is a special method used to initialize objects. In JS, because everything is an object, object constructors are often mentioned.

The object constructor is used to create an object of a specified type (Class) and can accept parameters to initialize the properties and methods of the object.

Object creation

In JS, there are three commonly used methods for creating objects:


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

However, this only creates three empty objects without any properties and methods. We can set properties and methods for objects through the following four methods.


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

Basic constructor

We know that there is no concept of Class in JS, but it It also supports creating objects using constructors.

By using the [new] keyword, we can make a function behave like a constructor to create its own object instance.

A basic constructor form is as follows:


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() );

This is the simple constructor pattern. It has two main problems,

First, it is difficult to inherit; second, toString() is defined once for each object instance. As a function, it should be shared by every instance of the Car type.

Using prototype constructors

There is a very good feature in JS: prototype [Prototype],

Use It, when creating an object, all properties in the constructor prototype can be obtained by the object instance.

This way multiple object instances can share the same prototype.

We improve the previous Car example as follows:


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() );

In the above example, the toString() method is shared by multiple Car object instances.

Related recommendations:

JavaScript Design Patterns Factory Pattern and Constructor Pattern_javascript skills

Node.js design The pattern uses streams for encoding

A brief introduction to the structural flyweight pattern of js design patterns

The above is the detailed content of JavaScript Constructor Pattern Example Analysis. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn