Home Web Front-end JS Tutorial JavaScript factory pattern, prototype pattern, constructor pattern

JavaScript factory pattern, prototype pattern, constructor pattern

Mar 17, 2018 pm 02:52 PM
javascript js prototype

1. What is a pattern? A pattern is a reusable solution, while an anti-pattern is a bad solution to a certain problem.

Common examples of js anti-patterns

① Pass strings to setTimeout and setInterval instead of functions, which will trigger the internal use of eval().
② Define a large number of variables in the global context to pollute the global namespace
③ Modify the prototype of the Object class
④ Use js in inline form. The js code embedded in the HTML file cannot be included in external unit tests in tools.

⑤Abuse document.write. If document.write is executed after the page is loaded, it will rewrite the page we are on. If you can use document.creatElement instead, try not to use document.write.

2. Categories of design patterns

(1).Factory pattern (simple and complex)

In short, it is encapsulated code, a simple factory The pattern is easy to understand. Its function is to use object-oriented methods to encapsulate some objects and encapsulate some repetitive codes that take up a lot of space. The implementation method is very simple, that is, create an object within the function, assign attributes and methods to the object, and then return the object. This method is to solve the problem of a large number of duplications of instantiated objects.

	function creatper(name,age){  
		var per=new Object(); //原料
		//加工
		per.name=name;
		per.age=age;  
		per.sayHi=function(){
		  	console.log(per.name+'已经有'+per.age+"岁");  
		}
		return per; //出厂
	}
	var test1=creatper('lili',22);
	var test2 =creatper('mike',25);//第二个实例
	test1.sayHi();
	test2.sayHi();
	console.log(test1.name);
Copy after login

It can be seen that using the factory mode, this per function can be called repeatedly to generate objects with different attribute values. This is just like a factory, mass production, the raw materials, processing, and delivery are all very clear. But you will find that the factory pattern cannot identify the type of objects, because they are all objects, unlike Date, Array, etc.

When to use factory pattern?
Factory mode is mainly used in the following scenarios:
①When objects or components involve high complexity
②When it is necessary to easily generate different instances of objects according to different environments

③When dealing with many small objects or components that share the same properties

(2).Constructor (Constructor) mode

Constructor (constructor method) can be used in ECMAScript to create specific Object. This mode can just solve the problem that the above factory mode cannot identify object instances.

	function Student(name,age,classa){//构造函数模式
        this.name = name;
        this.age = age;
        this.classa = classa;
        this.run = function () {
            console.log(this.name+ this.age+ "岁上"+this.classa +"!");
        }
    }
    var Benz = new Student('Lili',22,'初三');
    var BMW = new Student("Mike",25,"初一");
    console.log(Benz instanceof Student); //很清晰的识别他从属于Student
    Benz.run();
    BMW.run();
Copy after login

It can be seen from the code that except for the different function names in the factory mode, a. The constructor method does not explicitly create the object (new Object()), b. Directly set the attributes and methods are assigned to this object, c. There is no return statement. Able to identify objects (this is where the constructor pattern is better than the factory pattern). Note: Constructor method specifications: 1. The function name and the instantiation constructor name are the same and capitalized 2. To create an object through the constructor, you must use the new operator.

Since objects can be created through constructors, where does this object come from and where is new Object() executed? The execution process is as follows:
1. When the constructor is used, and new constructor(), then new Object() is executed in the background;
2. Give the scope of the constructor to the new object, (i.e. The object created by new Object()), and this in the function body represents the object created by new Object().
3. Execute the code in the constructor;

4. Return the new object (return directly in the background).

(3). Prototype pattern

JS stipulates that every created function has a prototype (prototype) attribute. This attribute is a pointer, pointing to an object, and the purpose of this object It contains properties and methods shared by all instances of a specific type. Using a prototype object allows all instance objects to contain these properties and methods.

	function Per(){}
	Per.prototype.name='小米';
	Per.prototype.age=22;
	Per.prototype.course=['php','javascript','java','C#'];
	Per.prototype.say=function(){
		console.log(this.name+"有"+this.age+"岁,学习了"+this.course+"等课程。");
	}
	var per1=new Per();
	var per2=new Per();
	per1.name='小林';
	per1.course.push('Html5');
	per1.say();
	per2.say();
	per2.course.pop();
Copy after login

Regarding the shortcomings of the prototype mode, I think it is also obvious. It omits the constructor to pass initialization parameters. As a result, all instances obtain the same attribute values ​​​​by default. Although you can make changes later, it is not convenient at all. This is not the biggest problem. The biggest problem with the prototype pattern is caused by the nature of sharing. Due to sharing, one instance modifies the reference, and the other one also changes the reference. The properties have been changed. Therefore, prototype mode is generally not used alone.

(4). Constructor with prototype = Prototype pattern + Constructor pattern

	function Per(name,age,course){
		this.name=name;
		this.age=age;
		this.course=course;
	}
	Per.prototype.say=function(){
		console.log(this.name+"有"+this.age+"岁,学习了"+this.course+"等课程。");
	}
	var per1=new Per('Make',22,['C#','java','PHP','Javascript']);
	var per2=new Per('小高',21,['oracle','mysql','nodejs','html5']);
	per1.say();//Make有22岁,学习了C#,java,PHP,Javascript等课程。
	per2.say();//小高有21岁,学习了oracle,mysql,nodejs,html5等课程。
	per1.course.pop();
	per1.say();//Make有22岁,学习了C#,java,PHP等课程。
	per2.say();//小高有21岁,学习了oracle,mysql,nodejs,html5等课程。
Copy after login

Analysis from the above: The constructor is used to define the attributes of the instance, and the prototype pattern is used to Define methods and some shared properties. Each instance will have its own attributes, but at the same time share methods, saving memory to the maximum extent. In addition, this mode also supports passing initial parameters. The most widely used.

Related recommendations:

Detailed Explanation of the Prototype Pattern of JS Design Pattern

Detailed Explanation of the Command Pattern of JS Design Pattern

Detailed Explanation of the Proxy Pattern of JS Design Patterns

The above is the detailed content of JavaScript factory pattern, prototype pattern, constructor pattern. For more information, please follow other related articles on the PHP Chinese website!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to implement an online speech recognition system using WebSocket and JavaScript How to implement an online speech recognition system using WebSocket and JavaScript Dec 17, 2023 pm 02:54 PM

How to use WebSocket and JavaScript to implement an online speech recognition system Introduction: With the continuous development of technology, speech recognition technology has become an important part of the field of artificial intelligence. The online speech recognition system based on WebSocket and JavaScript has the characteristics of low latency, real-time and cross-platform, and has become a widely used solution. This article will introduce how to use WebSocket and JavaScript to implement an online speech recognition system.

Recommended: Excellent JS open source face detection and recognition project Recommended: Excellent JS open source face detection and recognition project Apr 03, 2024 am 11:55 AM

Face detection and recognition technology is already a relatively mature and widely used technology. Currently, the most widely used Internet application language is JS. Implementing face detection and recognition on the Web front-end has advantages and disadvantages compared to back-end face recognition. Advantages include reducing network interaction and real-time recognition, which greatly shortens user waiting time and improves user experience; disadvantages include: being limited by model size, the accuracy is also limited. How to use js to implement face detection on the web? In order to implement face recognition on the Web, you need to be familiar with related programming languages ​​and technologies, such as JavaScript, HTML, CSS, WebRTC, etc. At the same time, you also need to master relevant computer vision and artificial intelligence technologies. It is worth noting that due to the design of the Web side

Essential tools for stock analysis: Learn the steps to draw candle charts with PHP and JS Essential tools for stock analysis: Learn the steps to draw candle charts with PHP and JS Dec 17, 2023 pm 06:55 PM

Essential tools for stock analysis: Learn the steps to draw candle charts in PHP and JS. Specific code examples are required. With the rapid development of the Internet and technology, stock trading has become one of the important ways for many investors. Stock analysis is an important part of investor decision-making, and candle charts are widely used in technical analysis. Learning how to draw candle charts using PHP and JS will provide investors with more intuitive information to help them make better decisions. A candlestick chart is a technical chart that displays stock prices in the form of candlesticks. It shows the stock price

WebSocket and JavaScript: key technologies for implementing real-time monitoring systems WebSocket and JavaScript: key technologies for implementing real-time monitoring systems Dec 17, 2023 pm 05:30 PM

WebSocket and JavaScript: Key technologies for realizing real-time monitoring systems Introduction: With the rapid development of Internet technology, real-time monitoring systems have been widely used in various fields. One of the key technologies to achieve real-time monitoring is the combination of WebSocket and JavaScript. This article will introduce the application of WebSocket and JavaScript in real-time monitoring systems, give code examples, and explain their implementation principles in detail. 1. WebSocket technology

PHP and JS Development Tips: Master the Method of Drawing Stock Candle Charts PHP and JS Development Tips: Master the Method of Drawing Stock Candle Charts Dec 18, 2023 pm 03:39 PM

With the rapid development of Internet finance, stock investment has become the choice of more and more people. In stock trading, candle charts are a commonly used technical analysis method. It can show the changing trend of stock prices and help investors make more accurate decisions. This article will introduce the development skills of PHP and JS, lead readers to understand how to draw stock candle charts, and provide specific code examples. 1. Understanding Stock Candle Charts Before introducing how to draw stock candle charts, we first need to understand what a candle chart is. Candlestick charts were developed by the Japanese

JavaScript and WebSocket: Building an efficient real-time weather forecasting system JavaScript and WebSocket: Building an efficient real-time weather forecasting system Dec 17, 2023 pm 05:13 PM

JavaScript and WebSocket: Building an efficient real-time weather forecast system Introduction: Today, the accuracy of weather forecasts is of great significance to daily life and decision-making. As technology develops, we can provide more accurate and reliable weather forecasts by obtaining weather data in real time. In this article, we will learn how to use JavaScript and WebSocket technology to build an efficient real-time weather forecast system. This article will demonstrate the implementation process through specific code examples. We

Simple JavaScript Tutorial: How to Get HTTP Status Code Simple JavaScript Tutorial: How to Get HTTP Status Code Jan 05, 2024 pm 06:08 PM

JavaScript tutorial: How to get HTTP status code, specific code examples are required. Preface: In web development, data interaction with the server is often involved. When communicating with the server, we often need to obtain the returned HTTP status code to determine whether the operation is successful, and perform corresponding processing based on different status codes. This article will teach you how to use JavaScript to obtain HTTP status codes and provide some practical code examples. Using XMLHttpRequest

The relationship between js and vue The relationship between js and vue Mar 11, 2024 pm 05:21 PM

The relationship between js and vue: 1. JS as the cornerstone of Web development; 2. The rise of Vue.js as a front-end framework; 3. The complementary relationship between JS and Vue; 4. The practical application of JS and Vue.

See all articles