Home > Web Front-end > JS Tutorial > body text

A preliminary study on JavaScript design patterns_javascript skills

WBOY
Release: 2016-05-16 15:21:15
Original
1073 people have browsed it

Purpose: There are many design patterns. Try to record the pros and cons of different design patterns learned so that you can refer to them later.

Foreword: When I read Elevation half a year ago, I saw the chapter on design patterns. I was confused, not because I couldn’t understand it, but because I didn’t understand why it was so troublesome just to create an object. It wasn't until I recently completed my first small project that I realized how disastrous it would be without appropriate specifications and restrictions when the amount of code increases. So I turned to elevation again and summarized the pros and cons of several simple design patterns I learned.

Text: This article introduces a total of 7 design patterns, their application scenarios, pros and cons.

1. Factory mode

Use functions directly to encapsulate objects and use objects as return values.

function person (name,age) {
  var obj=new Object();
  obj.name=name;
  obj.age=age;
  obj.sayName=function () {
    alert(this.name);
  };
  return obj;
}
var me=person("Su",25); 
Copy after login

Disadvantages: Problems with object recognition. All created objects are instances of Object and are difficult to distinguish.

2. Constructor pattern

function Person (name,age) {
  this.name=name;
  this.age=age;
  this.sayName=function () {
    alert(this.name);
  };
}
var me=new Person("Su",25); 
Copy after login

Advantages: Using the constructor pattern can mark instances as a specific type.

Disadvantages: The methods of the created objects are all private. If you just want to generate public methods, it will cause unnecessary waste of performance.

3. Prototype mode

Utilize prototype chain inheritance

function Person () {}
Person.prototype.name="Su";
Person.prototype.sayName=function () {
alert(this.name);}
var me =new Person(); 
Copy after login

Disadvantages: All properties and methods are shared by instances. When properties and methods contain reference type values, modifying the properties and methods of one instance will affect all other instances.

4. Prototype + constructor pattern

Private properties and methods are generated using constructors, and public properties and methods are inherited using prototypes. Combining the advantages of both methods.

function Person (name,age) {
  this.name=name;
  this.age=age;
}
Person.prototype={
  constructor:Person,
  sayName:function () {
      alert(this.name);
  }
}
var me=new Person("Su",25); 
Copy after login

Disadvantages: Pay attention to prototypal inheritance of reference type values.

ps: The code in the above picture rewrites the prototype object of the Person constructor and points the prototype object pointer to an object, so the constructor property points to Object instead of Person, so it must be explicitly set to Person.

5. Dynamic Prototype Mode

Essentially, it is still a constructor function. It only adds the specified method to the prototype object when it does not exist.

function Person (name,age) {
  this.name=name;
  this.age=age;
  if (typeof this.sayName!="function") {
    Person.prototype.sayName=function () {
      alert(this.name);
    }
  }
}
var me =new Person("Su",25); 
Copy after login

Disadvantage: Prototype objects cannot be overridden using object literals. Because this will make the instance pointer point to the new prototype object. In other words, the sayName method added to the prototype object in the above figure will be invalid.

6. Parasitic constructor pattern

Use the new operator when calling. Other than that, I don’t see any difference from the factory mode. Looking for advice from experts.

function person (name,age) {
  var obj=new Object();
  obj.name=name;
  obj.age=age;
  obj.sayName=function () {
    alert(this.name);
  };
  return obj;
}
var me=new person("Su",25); //这里使用new操作符 
Copy after login

7. Safe Constructor Pattern

No public attributes, disable this, and only expose necessary APIs for data calls. Suitable for areas with security requirements.

function Person (name) {
 var o=new Object();
 o.sayName=function () {
 alert(name);  
 }  
 return o;
}
var me=Person("Su"); 
Copy after login

As shown in the above code, the internal name attribute can only be accessed through the sayName method.

This article introduces seven design patterns to you, and introduces their advantages and disadvantages respectively. I hope it will be helpful to learn about js design patterns.

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!