Home Web Front-end JS Tutorial JavaScript inheritance study notes [must read for newbies]_javascript skills

JavaScript inheritance study notes [must read for newbies]_javascript skills

May 16, 2016 am 08:59 AM
javascript

as an object-oriented language (js is based on objects), javascript is essential to realize inheritance. however, since it does not have the concept of classes, it will not realize inheritance through classes like a real object-oriented programming language. but inheritance can be achieved in other ways. there are many ways to implement inheritance, and here are just a few of them.

1. prototype chain inheritance

function person() {  //被继承的函数叫做超类型(父类,基类)
      this.name='mumu';
      this.age='18';
    }
    
    person.prototype.name='susu';//当属性名相同时需就近原则,先在实例里面查找,没找到再到原型里找
       
    function worker(){ //继承的函数叫做子类型(子类,派生类)
      this.job='student';
    }

    worker.prototype=new person();//通过原型链继承,超类型实例化后的对象实例,赋值给子类的原型属性
    var p2=new worker(); 

    console.log(p2.name);
    console.log(p2 instanceof object);//ture 所有的构造函数都继承自object
Copy after login

the key to implementing inheritance above is: worker.prototype=new person(); turn the prototype of worker into an instance of person and inherit through the prototype chain.

note: when using the prototype chain to implement inheritance, you cannot use object literals to create prototype methods, because this will break the relationship and rewrite the prototype chain.

prototype chain inheritance issues:

1. there is a reference sharing problem. they still share the same space, and the subclass will affect the parent class

function person() {  
      this.bodys=['eye','foot'];
    }
    
    function worker(){ 
    }

    worker.prototype=new person();
    var p1=new worker();
    p1.bodys.push('hand');
    var p2=new worker(); 
    console.log(p1.bodys);
    console.log(p2.bodys);
Copy after login

2. when creating an instance of a subtype, parameters cannot be passed in the constructor of the supertype.

so how to solve the two problems of the prototype chain? then continue to look at the following inheritance methods~

2. borrowing constructor inheritance (also called object impersonation, fake object or classic inheritance)

function person(name,age){
    this.name=name;
    this.age=age;
    this.bodys=['eye','foot'];
  }

  person.prototype.showname=function(){
    console.log(this.name);
  }

  function worker(name,age,job){
    person.call(this,name,age);
    this.job=job;//子类添加属性
  }

  var p1=new worker('mumu','18','学生'); 
  p1.bodys.push('hand') ;
  var p2=new worker();

  console.log(p1.name);
  console.log(p2.bodys);
  console.log(p1.showname());
Copy after login

a brief analysis of the above principle of using borrowed constructors: person.call(this, name, age); this code calls the parent constructor, inherits the parent properties, and uses the call method to call the person constructor to change the execution time of the function. this, here is a worker object from this-> new constructor disguise method: pass the worker to the person above.

when the reference type is placed in the constructor, it will not be shared, so p2 is not affected.

the constructor inheritance method is used here to solve the problem that the prototype chain cannot pass parameters and reference types are shared.

tips: the call() and apply() methods can change the scope of function execution. in short, they change the content pointed to by this in the function.

both call() and apply() accept two arguments: the first is the scope in which the function is run, and the other is the passed argument.

the difference between call and apply is the difference in parameters.
the parameters in call must be enumerated one by one.
parameters in apply must be arrays or arguments objects

then the question arises: why is the result of p1.showname() wrong? ----because the borrowed constructor inheritance method can only inherit the properties and methods in the constructor. a problem with borrowing constructors is also discovered here.

note: since all methods are placed in the constructor, every time we instantiate it, memory space will be allocated to it, causing a waste of resources. therefore, generally we put the methods in the prototype and the attributes in the constructor. .


borrowing constructor inheritance problem:

because the borrowed constructor can only inherit the properties and methods in the constructor, the methods defined in the prototype of the super type are invisible to the subclass, so it is equivalent to having no prototype. as a result, all methods can only be defined in the constructor, so there is no function reuse.

so how to solve the problems caused by borrowing constructors? then we have to look at the following inheritance method

3. combination inheritance (pseudo-classical inheritance)

function person(name,age){
    this.name=name;
    this.age=age;
  }

  person.prototype.showname=function(){
    console.log(this.name);
  }

  function worker(name,age,job){
    person.call(this,name,age);//借用构造函数
    this.job=job;
  }
  
  worker.prototype=new person();//原型链继承
  var p1=new worker('mumu','18','学生'); 

  console.log(p1.age);
  p1.showname();
Copy after login

combined inheritance: combine prototype chains with borrowed constructors.

idea: realize the inheritance of attributes and methods on the prototype by using the prototype chain, and realize the inheritance of instance attributes by borrowing the constructor

the above example person.call(this,name,age); borrows the constructor to inherit the properties

worker.prototype=new person(); the prototype chain inherits the method, avoiding the shortcomings of both, integrating their advantages, and becoming the most commonly used inheritance pattern.

problems with combined inheritance:

the supertype constructor is called twice, once when creating the subtype prototype and once inside the subtype's constructor.

to solve this problem, we need to use parasitic combined inheritance.

4. prototypal inheritance

function object(proto) {
    function f() {}
    f.prototype = proto;
    return new f();
  }

  var person = {
    name: 'mumu',
    friends: ['xiaxia', 'susu']
  };

  var anotherperson = object(person);
  anotherperson.friends.push('wen');
  var yetanotherperson = object(person);
  anotherperson.friends.push('tian');
  console.log(person.friends);//["xiaxia", "susu", "wen", "tian"]
console.log(anotherperson.__proto__)//object {name: "mumu", friends: array[4]}
Copy after login

a brief analysis: function object (proto) is a temporary transit function. the parameter proto inside represents an object to be passed in. the f () constructor is a temporarily newly created object used to store the passed object. f .prototype = proto; assigns the object instance to the prototype object of the f constructor, and finally returns the object instance of the passed object. prototypal inheritance still shares properties of reference types.

5. parasitic inheritance

//临时中转函数  
function object(proto) {
    function f() {}
    f.prototype = proto;
    return new f();
  }

  //寄生函数
  function create(proto){
    var f=object(proto);
    f.love=function(){
      return this.name;
    }
    return f;
  }

  var person = {
    name: 'mumu',
    friends: ['xiaxia', 'susu']
  };

  var anotherperson = create(person);
  console.log(anotherperson.love());寄生组合式继承
Copy after login

6. parasitic combined inheritance

function object(proto) {
    function F() {}
    F.prototype = proto;
    return new F();
  }

  //寄生函数
  function create(Person,Worker){
    var f=object(Person.prototype);//创建对象
    f.constructor=Worker;//调整原型构造指针,增强对象
    Worker.prototype=f;//指定对象
  }
  
  function Person(name,age){
    this.name=name;
    this.age=age;
  }
  Person.prototype.showName=function(){
    console.log(this.name);
  }
  function Worker(name,age,job){
    Person.call(this,name,age);
    this.job=job;
  }
  
  create(Person,Worker);//寄生组合式继承
  var p1=new Person('mumu','18','学生');
p1.showName();
Copy after login

this method is also the most perfect and ideal among the current inheritance methods.

the above javascript inheritance study notes [must read for newbies] are all the content shared by the editor. i hope it can give you a reference, and i hope you will support script home.

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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

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.

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

How to use JavaScript and WebSocket to implement a real-time online ordering system How to use JavaScript and WebSocket to implement a real-time online ordering system Dec 17, 2023 pm 12:09 PM

Introduction to how to use JavaScript and WebSocket to implement a real-time online ordering system: With the popularity of the Internet and the advancement of technology, more and more restaurants have begun to provide online ordering services. In order to implement a real-time online ordering system, we can use JavaScript and WebSocket technology. WebSocket is a full-duplex communication protocol based on the TCP protocol, which can realize real-time two-way communication between the client and the server. In the real-time online ordering system, when the user selects dishes and places an order

How to implement an online reservation system using WebSocket and JavaScript How to implement an online reservation system using WebSocket and JavaScript Dec 17, 2023 am 09:39 AM

How to use WebSocket and JavaScript to implement an online reservation system. In today's digital era, more and more businesses and services need to provide online reservation functions. It is crucial to implement an efficient and real-time online reservation system. This article will introduce how to use WebSocket and JavaScript to implement an online reservation system, and provide specific code examples. 1. What is WebSocket? WebSocket is a full-duplex method on a single TCP connection.

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

How to use insertBefore in javascript How to use insertBefore in javascript Nov 24, 2023 am 11:56 AM

Usage: In JavaScript, the insertBefore() method is used to insert a new node in the DOM tree. This method requires two parameters: the new node to be inserted and the reference node (that is, the node where the new node will be inserted).

JavaScript and WebSocket: Building an efficient real-time image processing system JavaScript and WebSocket: Building an efficient real-time image processing system Dec 17, 2023 am 08:41 AM

JavaScript is a programming language widely used in web development, while WebSocket is a network protocol used for real-time communication. Combining the powerful functions of the two, we can create an efficient real-time image processing system. This article will introduce how to implement this system using JavaScript and WebSocket, and provide specific code examples. First, we need to clarify the requirements and goals of the real-time image processing system. Suppose we have a camera device that can collect real-time image data

See all articles