美文网首页让前端飞
原型链完全解析

原型链完全解析

作者: jie_YJ | 来源:发表于2019-01-28 01:03 被阅读3次

    什么是原型链?原型对象?原型?

    我们来慢慢逐一解析。。。

    原型对象:一个构造函数的prototype(原型)属性就是指向它的原型对象,通过这个构造函数实例化的对象,都可以共享原型对象中的属性和方法。

    原型链:每个对象都有一个__proto__属性,这个属性指向一个原型对象。而原型对象也是一个对象,所以它也有自己的__proto__,直至指向为null值。为什么??后面会进一步解析。这一个链路过程就称为原型链

    js有几个点和特性要先牢记的。。

    1.任何对象都有__proto__属性;

    2.任何函数都有prototype属性;

    3.一切皆对象(包括函数),对象也是函数;

    4.ECMAScript规定了两个特殊的内置对象:Object和Function。他们的特殊性在于,他们本身既是对象又是函数,而他们同时也是对象和函数的构造器。

    来个简单的

    基本上都可以用一个三角形来解析一个环路的关系。这个是比较容易看懂的。

    先放个大招来看看整个的原型链是怎么走的!

    全图

    不知道你有没看懂,不过也没关系。。下面会逐个逐个解析!

    一,

    1

    这个就是最开始那个,没什么好解释的。

    二,

    2

    由一切皆对象得,函数也是对象的一种。那必然也是通过一个构造函数实例化出来。可以通过Person.__proto__ === Function.prototype来验证这个例子!而Function是属于function类型的对象(系统编译的二进制代码函数),可以直接拿来使用。所以有一个很神奇的回路:

    三,

    3

    Function对象通过它本身来进行实例化。

    1)new Function instanceof Function为true;

    2)Function.__proto__ === Function.prototype

    就能得出这个结论。

    四,

    4

    继续继续。。没什么好解释

    五,

    说回Person.prototype

    4

    继续往下走!

    六,

    6.

    Object也是属于js的内置对象,

    七,

    如果按照对象都有__proto__属性的逻辑,因为Object.prototype是一个对象,如果由Object()生成就会有:

    Object.prototype.__proto__ === Object.prototype 指向它本身,为了让原型链有终点,不无限循环。就让Object.prototype的__proto__来指向了null值。

    7,

    关于Object.prototype,跟一般函数的prototype不一样,有一堆的方法,都是js对象的系统默认方法。


    这些都是个人自己总结的经验,如有不对和错误,勿喷,欢迎指出错误!

    欢迎大家互相交流~

    相关文章

      网友评论

        本文标题:原型链完全解析

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