JS原型学习笔记

作者: 招投标秘籍 | 来源:发表于2021-04-18 16:53 被阅读0次

    原型被称为js的三座大山之一,对于我来说挺难理解,所以js的基础块学完了我也没整理学习,今天有时间来整理一下学习的笔记.

    1.什么叫原型

    在javascript中,函数可以有属性。 每个函数都有一个特殊的属性叫作原型(prototype) 。

    2.从何引出这个疑问?

    我们知道 JS 有对象,比如

    var obj = { name: 'obj' } ;
    obj.toString()
    
    image.png

    大家看到这里有没有疑问,我没对toString()进行赋值,已经有值,所以obj原来是不是已经有东西了呢?这就是我们今天需要讲的原型.
    我们看看obj里面有什么


    image.png

    我们发现 console.dir(obj) 打出来的结果是:

    1. obj 本身有一个属性 name(这是我们给它加的)
    2. obj 还有一个属性叫做 proto(它是一个对象)
    3. obj.proto 有很多属性,包括 valueOf、toString、constructor 等
    4. obj.proto 其实也有一个叫做 proto 的属性(console.log 没有显示),值为 null
      现在回到我们的问题:obj 为什么会拥有 toString 属性?
      答案:
      这跟 proto 有关.
      我们在来看下面的打印结果
      image.png
      我们打印出来的东西可以看出里面也有toString(),所以我们可以看出obj有一个隐藏属性proto,里面储存了Object.prototype对象的地址 ,当obj.toString()当在这里面没找到就在Object.prototype里面找,所以找到了Object.prototype.toString().所以XXX.prototype存储了XXX对象的共有属性,这就是原型.

    3.原型的三大公式和公理

    3.1JS公式

    对象._proto_ === 其构造函数的.prototype(js唯一的公式,可以套用)
    

    3.2根公理

    Object.prototype 是所有对象的(直接或间接)原型
    加了一个直接或间接,所谓公理就是规定好的
    

    3.3函数公理

    所有函数都是由 Function 构造的
    任何函数.__proto__ === Function.prototype
    任意函数有 Object / Array / Function
    

    4.根据前面的公式我们可以推出js的内存图

    image.png

    本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源.

    相关文章

      网友评论

        本文标题:JS原型学习笔记

        本文链接:https://www.haomeiwen.com/subject/evqvlltx.html