Home Web Front-end JS Tutorial Broken threads, prototypes and prototype chains in JavaScript

Broken threads, prototypes and prototype chains in JavaScript

Nov 04, 2021 am 11:43 AM
javascript prototype prototype chain

Broken threads, prototypes and prototype chains in JavaScript

The relationship between prototype and prototype chain runs through the objects in JavaScript, and everything in JavaScript is an object, so prototype and prototype chain are more important The concept of JavaScript, today I will take you to take a look at the prototype and prototype chain in JavaScript.

1. Understand the concept (just know these two nouns)

  1. Prototype (<em>prototype</em>)

  2. Prototype chain (__<em>proto__</em>)

2. Understand the affiliation relationship

prototype  => 函数的一个属性         : 同时也是一个 对象{} (称之为原型对象亦可)

__proto__ => 对象Object的一个属性   : 同时也是一个 对象{}   (__proto__也就是[[Prototype]])
Copy after login

Note: The __proto__ of the object saves the prototype of the object’s constructor

a. Declare a constructor

    function Test() { }
  
    //prototype 是函数的一个属性
    console.dir(Test);
    console.log(Test.prototype);
    // Test.prototype也是一个对象
    console.log(typeof Test.prototype);
Copy after login

b. Declare an object

    const test = new Test();
    
    console.log(test);
    //验证test为一个对象
    console.log(typeof test);
    //__proto__是对象的一个属性
    console.log(test.__proto__);
    console.log(Test.prototype);
    //对象的__proto__属性存储着Test.prototype
    console.log(test.__proto__ === Test.prototype);
    // test.__proto__也是一个对象
    console.log(typeof test.__proto__);
Copy after login
function Test() {}
console.log(Test.prototype); //验证函数是否有prototype属性

let test = new Test();
console.dir(test.__proto__); //验证对象是否有__proto__属性
console.log(test.__proto__ === Test.prototype);//验证对象的__ptoto__是否保存着该对象的构造函数的prototype

console.log(Test.prototype.__proto__ === Object.prototype);//Test.prototype(是一个对象)的__proto__属性是否是对象的原型属性
console.log(Object.prototype.__proto__);//原型链的顶层没有__proto__属性 null
Copy after login

3. In-depth understanding of prototype chain, prototype and prototype inheritance

    function Test(){}
    let test =new Test();
    test.a= 10;
    //test.__proto__ === test.constructor.prototype
    test.__proto__.b1=11;//对象的__proto__属性存储着对象构造函数的prototype属性
    Test.prototype.b2=11;
   
    test.__proto__.__proto__.c1=12;
    Object.prototype.c2=12;
    console.log(test);
    console.log(Test.prototype);
    console.log(Object.prototype.__proto__);
   
    /*逐层解析
    * test{
    *        a = 10
    *        __proto__:Test.prototype{
    *                 b = 11
    *                 __proto__:Object.prototype{
    *                           c = 12
    *                           X__prototype__:null
    *                 }         
    *        }
    *     }
    *
    * */
Copy after login

4. Summary

  • It is not recommended to use __proto__ to access directly.

  • can be simply summarized as taking <span style="color: rgb(0, 0, 0);">prototype</span> as the prototype node, <span style="color: rgb(0, 0, 0);">__proto__</span> as the prototype chain .

  • Every instance object (<span style="color: rgb(0, 0, 0);">object</span>) has a private property (called <span style="color: rgb(0, 0, 0);">__proto__</span> ) points to the prototype object (<span style="color: rgb(0, 0, 0);">prototype</span>) of its constructor. The prototype object also has a prototype object of its own (<span style="color: rgb(0, 0, 0);">__proto__</span>), layering up until an object's prototype object is <span style="color: rgb(0, 0, 0);">null</span>. By definition, <span style="color: rgb(0, 0, 0);">null</span> has no prototype and serves as the last link in this prototype chain.

  • <span style="color: rgb(0, 0, 0);">someObject.[[Prototype]]</span> symbol is used to point to <span style="color: rgb(0, 0, 0);">someObject# The prototype of </span>##,someObject.[[Prototype]]<span style="color: rgb(0, 0, 0);"></span> === __proto__<span style="color: rgb(0, 0, 0);"></span>( A non-standard property of JavaScript but implemented by many browsers).

  • Object.prototype<span style="color: rgb(0, 0, 0);"></span> The attribute represents the prototype of Object<span style="color: rgb(0, 0, 0);"></span> object.

  • The

    [[Prototype]]<span style="color: rgb(0, 0, 0);"></span> of the instance object created by the constructor points to func<span style="color: rgb(0, 0, 0);"></span>prototype<span style="color: rgb(0, 0, 0);"></span> attributes.

Recommended videos:

"Quick Introduction to JavaScript_Jade Girl Heart Sutra Series", "Dugu Jiujian (6)_jQuery Video Tutorial"

The above is the detailed content of Broken threads, prototypes and prototype chains in JavaScript. 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 Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Article Tags

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 implement an online speech recognition system using WebSocket and JavaScript

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 implementing real-time monitoring systems

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 implement an online reservation system using WebSocket and JavaScript

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

How to use JavaScript and WebSocket to implement a real-time online ordering system

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

Simple JavaScript Tutorial: How to Get HTTP Status Code

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 forecasting system

How to get HTTP status code in JavaScript the easy way How to get HTTP status code in JavaScript the easy way Jan 05, 2024 pm 01:37 PM

How to get HTTP status code in JavaScript the easy way

Introduction to the new map of Genshin Impact version 4.4 Introduction to the new map of Genshin Impact version 4.4 Jan 31, 2024 pm 06:36 PM

Introduction to the new map of Genshin Impact version 4.4

See all articles