0
点赞
收藏
分享

微信扫一扫

JS原型学习笔记

楚木巽 2021-09-30 阅读 62

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

1.什么叫原型

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

2.从何引出这个疑问?

我们知道 JS 有对象,比如

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


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



我们发现 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 有关.
    我们在来看下面的打印结果


    我们打印出来的东西可以看出里面也有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的内存图


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

举报

相关推荐

0 条评论