Home > Article > Web Front-end > JS Inheritance--Prototype Chain Inheritance and Class Inheritance_Basic Knowledge
What is inheritance? Answer: The process of others giving it to you for free is called inheritance.
Why use inheritance? Answer: Just pick it up ready-made.
Well, since everyone wants to pick up what’s already available, we need to learn how to inherit it!
Before understanding, you need to understand concepts such as Constructor, Object, Prototype Chain...
Two inheritance methods commonly used in JS:
Prototype Chain Inheritance:
//New object
var child = proInherit(parent);
//Test
alert(child.name); //"baba"
child.say(); //"I am baba"
Use the proInherit (obj) method and pass in the object to realize the inheritance of the object's attributes and methods. This method is not a built-in method, so you have to define it yourself. It is very simple:
Where F() is a temporary empty constructor, and then the prototype of F() is set as the parent object, but at the same time it has all the functions of its parent object by benefiting from the _proto_ link.
Chain diagram:
Class inheritance:
//Subclass constructor
function Child() {
this.name = "cc";
}
//Class inheritance
classInherit(Parent, Child);
//Instance
var child = new Child();
alert(child.getName()) //“baba”
Let’s take a look at the key methods of inheritance: classInherit(Parent,Child)
Analyze this method:
Chain diagram:
Although this method inherits the prototype method during the instance, the attributes of the parent class cannot be inherited. The following is a
copy inheritance, which is a supplement to class inheritance.
Copy inheritance:
//Rewrite Parent
function Parent() {
this.name = "pp";
this.obj= {a:1,b:2};
this.arr = [1, 2]
}
//Instance
var child = new Child();
var parent = new Parent();
copyInherit(parent, child);
alert(child.name) //"baba"
alert(child.arr) //1,2
alert(child.obj.a) //1
Analyze copyInherit(p,c)
When a value is assigned to a variable, there are two methods: passing by value and passing by reference. When the attributes in your parent object contain array types or object types, c[i] = toStr.call(p[i] ) == astr ? [] : {}; This sentence will prevent the parent object's properties from being tampered with when modifying the child object's properties.
Summary:
Class inheritance is more common because everyone is familiar with this constructor method, but it takes up a lot of memory. Prototypal inheritance takes up less memory, but it is more troublesome to clone arrays or object types. Copy inheritance is simple and widely used.