• 原型链


    前两天电面的时候,被问到原型链,其实也是了解的,但当时脑子短路,就只回答了原型链继承,并没有给出核心的讲解。我想那肯定不是面试官想要的。我当时真的是脑子短路了,至少应该说一句:原型链的核心是_proto_

    今天我要小小地归纳一下

    我今天看了一篇人家的文章,准备按着那个思路来

    1、普通对象与函数对象

     很早就听大神讲过,JS中一切皆对象!

    但是还要细分为普通对象和函数对象。其实也好理解:函数声明,函数表达式即为函数对象;那么其它的就是普通对象了。(我的理解简单粗暴,我们看到的函数就是函数对象咯)

    为了表述更直观,我偷了一张图:

    2、原型对象prototype

    原型对象prototype是函数对象特有的属性

    原型对象prototype的实质是普通对象,但Function.pototype是一个例外,体现在两点:

    1、它是一个函数对象

    2、它没有prototype属性

     function f(){};
     console.log(f.prototype) //Object
     console.log(typeof f. prototype) //Object
     console.log(typeof Function.prototype) // Function,这个特殊
     console.log(typeof Object.prototype) // Object
     console.log(typeof Function.prototype.prototype) //undefined

    这是第二行代码的Object展开结果

    想起很久之前听过一个大神讲课,他大致描述prototype如下:

    1 function f(){};
    2 f.prototype={
    3     constructor:function f(),//构造器指向函数本身
    4     _proto_:parent.prototype//指向上一层原型对象
    5 }

    为什么Function.pototype是函数对象呢?

    可以看到,函数对象f的原型对象prototype是Object

    而Function.pototype却是一个匿名空函数

    3、原型链

     无论是函数对象还是普通对象,都存在__proto__内置属性

    它是原型链的而核心

    用于指向创建本对象的函数对象的prototype

     

    同时,F.prototype的__proto__也指向创建F.prototype的函数对象(Object)的prototype

    再往上

    这个由__proto__串联起来知道null的链叫做原型链

    两个注意点:

    由于Object和Function都是JS内置函数对象,它们都是通过new Function创建,因此:

    Object.__proto__===Function.prototype;
    Function.__proto__===Function.prototype;

    还有一个点,我不理解

    上面已经验证过,Function.prototype是函数对象,一般而言,函数对象都是由new Function创建,那么Function.prototype.__proto__应该等于Function.prototype啊

    但是:

    Function.prototype真是特殊啊!!
    不懂!!mark一下
    4、总结

    进一步说明原型链的核心是__proto__

     
  • 相关阅读:
    【SpringBoot/CLI】如何创建一个SpringBoot控制台程序
    VMwareworkstation_full_12.1.1.6932 卸载方法
    【Idea】如何更改Idea编辑器字体
    使用idea从git取得Web项目后,启动时出现异常:java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
    【Elasticsearch】如何给ES设置必须以用户名密码访问
    CLR基本原理和如何运用于GOCW
    修改VNC分辨率大小
    判断一个点是否在RotatedRect中
    在C#中使用OpenCV(使用OpenCVSharp)
    求解向量和轮廓的交点
  • 原文地址:https://www.cnblogs.com/dll-ft/p/5814069.html
Copyright © 2020-2023  润新知