美文网首页
一图了解原型链

一图了解原型链

作者: Blank_8c8e | 来源:发表于2021-04-26 22:35 被阅读0次

前言:

每个函数创建时,都会按照特定的规则:

  1. 创建一个prototype属性(指向原型对象);

  2. 默认情况下,所有原型对象会自动获得一个 constructor属性,指向与之关联的构造函数;

  3. 自定义构造函数时原型对象**会默认获得constructor属性,其他所有方法都继承自Object

  4. 每次调用构造函数创建新实例,实例内部的[[Prototype]]指针就会被赋值为构造函数的原型对象,脚本中没有访问该特性的方法,但在Safari、Chrome、Firefox中会在每个对象上暴露__proto__属性,能通过这个属性访问对象的原型

functon Foo(){}
let f1 = new foo();
let f2 = new foo();

[图片上传失败...(image-2df68f-1619447723275)]

  1. 构造函数<mark>Foo()</mark>

    构造函数Foo其原型属性prototype指向其原型对象Foo.prototype。原型对象Foo.prototype的默认属性constructor指向原函数Foo

    console.log(Foo.prototype)
    
    image.png

构造函数Foo的实例f1,f2,其__proto__属性指向其构造函数的原型对象Foo.prototype,所以实例能共享原型对象上的属性和方法。

console.log(f1.__proto__, 'f1.__proto__');
console.log(Foo.prototype, 'Foo.prototype');
console.log(f1.__proto__ === Foo.prototype); // true
image.png

构造函数FooFunciton函数创建的实例,所以其__proto__属性指向的是Function函数的原型对象Function.prototype

console.log(Foo.__proto__, 'Foo.__proto__');
console.log(Function.prototype, 'Function.prototype');
console.log(Foo.__proto__ === Function.prototype); // true
image.png

构造函数Foo的原型对象Foo.prototype(本质上是一个对象),是Object创建的一个实例,因此其__proto__属性指向Object的原型对象Object.prototype

console.log(Foo.prototype.__proto__, 'Foo.prototype.__proto__');
console.log(Object.prototype,'Object.prototype');
console.log(Foo.prototype.__proto__ === Object.prototype) // true
image.png
  1. Function函数

    所有的函数其实都是Function函数的实例,所以所有的函数的__protot__属性都指向Function.prototype

    因为Function函数实例化了它本身,所以Function.__protot__就等于Function.prototype

    console.log(Function.__proto__, 'Function.__proto__');
    console.log(Function.prototype, 'Function.prototype');
    console.log(Function.__proto__ === Function.prototype) // true
    
    image.png

    Function函数的原型对象是Object函数创建的实例,因此Function.prototype.__proto__,指向的是Object的原型对象Object.prototype

    console.log(Function.prototype.__proto__, 'Function.prototype.__proto__');
    console.log(Object.prototype, 'Object.prototype');
    console.log(Function.prototype.__proto__ === Object.prototype) // true
    
    image.png
  2. Object函数

    Object函数实际上是Function函数创建的实例,其__proto__属性指向的就是Function函数的原型对象Function.prototype

    需要注意的是Object.prototype__proto__终止于null

    console.log(Object.prototype.__proto__, 'Object.prototype.__proto__');
    
     ![image.png](https://img.haomeiwen.com/i10868925/c1c82c57d52764bf.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

如果上述有什么不对的地方,可以在下方留言评论告知哦!

纯手打,请各位大佬给我点个赞!感谢!

image.png

相关文章

  • 一图了解原型链

    前言: 每个函数创建时,都会按照特定的规则: 创建一个prototype属性(指向原型对象); 默认情况下,所有原...

  • 2020-05-20 JS原型链

    1 原型链图 2 原型链的应用 loading....

  • javascript原型链详细关系图及总结

    一:构造函数创建对象字面量原型图 二:完整对象字面量原型图 三:数组原型链 四:基本包装类型原型链 总结: 根据以...

  • 图解原型链构成

    本文不对原型链做过多的解释,意在理解记住原型链的构成。下面会用到一些图,先来看看每个图代表什么。 首先来了解一下关...

  • Prototype

    原型链理解图

  • js 原型链与原型继承

    原型 了解原型链,我们先了解下原型 所有的对象都有toString()、valueOf()、constructor...

  • 原型链

    原型 了解原型链,我们先了解下原型 所有的对象都有toString()、valueOf()、constructor...

  • 再来看一次JS继承

    原型链继承 理解原型链的概念 用一张图来理解原型链再合适不过了。 总结概括JS红宝书上对原型链的概念:每个函数都有...

  • 深入javascript之原型链继承

    前言 温故而知新,主要梳理js的原型链继承知识, 先看一张经典的图,很好的描述了js原型链。对对这一块还不是很了解...

  • 原型,原型链(原型链图)

    看图之前我们首先来了解几个对象原型的基本知识: 例子: function Fn() {}// Fn为构造函数 ...

网友评论

      本文标题:一图了解原型链

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