zoukankan      html  css  js  c++  java
  • Javascript中的原型链,__proto__和prototype等问题总结

    1.js中除了原始数据类型 都是对象。
    包括函数也是对象,可能类似于C++函数对象把 应该是通过解释器
    进行()操作符重载或其他操作, 用的时候把它当函数用就行
    但是实际上本质是一个对象

    原型也是一个对象,所以也称作原型对象


    2. js中所有对象都有 __proto__ 属性,指向他的原型对象

    一般原型对象{}内部包含两个必要属性constructor 和__proto__,__proto__指向原型对象的原型对象

    3. js中函数对象具有prototype属性

    (函数对象可以被当作constructor使用

    constructor被翻译成构造器/构造函数)

    prototype指向 这个函数实例化出的对象的原型(__proto__)

    如果新建一个构造函数 那么他的pototype由解释器自动生成,结构应该是这样的

    {

      constructor: // 这个构造函数本身

          __proto__: Object // 指向Object的"原型对象", 之所以这么指向,是因为这个prototype属性要赋给他实例化出来的对象的__proto__ 所以这么指向

    }

    4.Object的__proto__属性是null

    练习:

    问题1:

    function a(){}

    解释一下a的__proto__属性

    答:

    a是一个对象,所以a有__proto__属性, 指向a函数对象的原型

    a函数对象的原型 是Function函数对象

    Funciton函数对象的原型(__proto__属性)是Object函数对象

    Object函数对象的原型(__proto__)指向null 即那个原型对象

    解释一下a的prototype属性

    prototype属性是在初始化函数对象的时候解释器自动加上的,方便new操作符内部实现时的调用

    {

      constructor://a本身

          __proto__:Object

    问题2为什么要有prototype这个属性?

    究其原因,是给解释器内部实现new操作符时使用的,

    new操作符的处理函数 可以查看下面资料

    资料一:

    https://lazy2009.iteye.com/blog/1675059

    资料二:

    知识点:

    Object.create的内部原理:

    Object.create =  function (o) {

        var F = function () {};
       // 这里给函数prototype属性赋值
        F.prototype = o;
      // 这个prototype属性给new操作符使用
        return new F();
    };
  • 相关阅读:
    美团数据治理参考
    Ignite(三): Ignite VS Spark
    Ignite(二): 架构及工具
    Sqlserver 计算两坐标距离函数
    Ignite(一): 概述
    IMDG
    锂电池不一致而产生危害
    平均数_中位数_众数在SqlServer实现
    怎样给孩子取一个好名字?搜狗“有名堂”大数据支招
    eclipse导入外部jar包
  • 原文地址:https://www.cnblogs.com/eret9616/p/10495863.html
Copyright © 2011-2022 走看看