When we think of object-oriented, we can think of classes, objects, encapsulation, inheritance, and polymorphism. The description in the book "javaScript Advanced Programming" (People's Posts and Telecommunications Publishing House, translated by Cao Li and Zhang Xin. The English name is: Professional JavaScript for Web Developers) is relatively detailed. Let's look at the various ways to define classes in JavaScript.
1. Factory method
We must master creating our own classes and objects in javaScript. We all know that the properties of objects in javaScript can be dynamically defined after the object is created, such as the following code:
This is a bit interesting, but in object-oriented the method we often use to create objects is:
Car car=new Car();
Using the new keyword has been deeply rooted in people's hearts, so it always feels awkward when we use the above method to define, and it creates new properties and functions every time it is called, which is not functionally practical. Let's take a look at the formal definition of the constructor class.
2. Constructor
This method looks a bit like a factory function. The specific performance is as follows:
3. Prototype method
Using the prototype attribute of the object, you can see the prototype on which the creation of a new object depends. The method is as follows:
This method should actually be very friendly, but compared to Java's syntax, it should be a little disharmonious and messy. For C, we don't feel that troublesome, but when developing C R&D personnel generally seldom involve JavaScript, but for J2EE R&D personnel, this approach is always a bit awkward. It always feels like it is not a friendly package. In fact, it is just that the visual effect of the package is not very good. If you want to achieve the effect of visual encapsulation and achieve the effect of this method, I personally think it is more troublesome. That is the dynamic prototyping method.
5. Dynamic prototype
For developers who are used to using other languages, using a mixed constructor/prototype approach may feel less harmonious. After all, most object-oriented languages visually encapsulate properties and methods when defining classes. Consider the following C# class:
public Car(string color, int doors, int mpg) //constructor
{
this.color = color;
this.doors = doors;
this.mpg = mpg;
}
public void showColor() //method
{
Console.WriteLine(this.color);
}
}
The basic idea of the dynamic prototype method is the same as the hybrid constructor/prototype approach, that is, non-functional properties are defined within the constructor, while functional properties are defined using prototype properties. The only difference is where the object methods are assigned. The following is the Car class rewritten with the dynamic prototype method:
6 Mixing factory method
This method is usually a workaround when the previous method cannot be applied. Its purpose is to create fake constructors that just return a new instance of another kind of object. This code looks very similar to the factory function:
Copy code
showColor: function() { alert(this.color); }
} Car.showColor();