• js原型链


        js 原型链,其实就是对象,方法的一些关系,首先要明确一点,对象实例是没有prototype,函数才有prototype

        废话不多说我们一些console一下都是写什么东西

    /* 首先我们创建一个对象 */
    let obj = {}
    /* 上面的和下面是一样的,都是一个空对象 */
    let obj2 = new Object()
    
    console.log(obj.prototype)  // 输出undefined
    /* 证明对象实例确实是没有prototype的 */
    /* 让后我们查看一下obj.__proto__ */
    console.log(obj.__proto__)/* 行吧输出了一对东西无法判断 */
    /* 我们猜测一下 */
    console.log(obj.__proto__===Object.prototype) //输出true
    /* 上面一行 完全等于,证明这是一个东西*/
    /* 那Object.__proto__ 又指向的啥,打印一下 */
    
    console.log(Object.__proto__) // ƒ () { [native code] }
    /* 有点像一个函数 */
    /* 猜测一下 */
    console.log(Object.__proto__ === Function.prototype) //输出true /* 原来指向的是这里 */
    
    /* 那我们继续看一下 Object.prototype.__propo__ 是啥*/
    console.log(Object.prototype.__proto__) //输出 null /* 到null了,证明到头了,没东西了 */
    
    /* 那上面就是对象的一整条原型链了 */
    
    /* 那下面我们看一下函数的 */
    /* 首先看一下构造函数 */
    
    function Person () {
        name: 'cz'
    }
    
    let p1 = new Person()
    
    /* p1是一个对象,根据上面的他只有__proto__ */
    console.log(p1.__proto__) // constructor ƒ Person()
    
    console.log(p1.__proto__ === Person.prototype) //true
    
    /* 下面就是一个正常的函数了 */
    /* Person 就是一个函数 */
    console.log(Person.__proto__) // ƒ () { [native code] }
    /* 上面这个看着有点像,挺像,之前,Object.__proto__ */
    /* 那就不用考虑了 */
    console.log(Person.__proto__ === Function.prototype) //ture
    /* 再看一下 Function.__proto__*/
    console.log(Function.__proto__) //ƒ () { [native code] }  
    /* 然是这样,Funtion的显示原形和隐式原形相等 */
    console.log(Function.__proto__.__proto__) /* 输出,constructor: ƒ Object() 有点意思*/
    /* 上面的不是  Function.__proto__.__proto__ === Function.prototype.__proto__*/
    /* 那最终是不是有道对象上去了 */
    console.log(Function.prototype.__proto__ === Object.prototype) //输出true

      function 最终又到Object,不得不说一切都对象 

      总结一下

        重点重点,实例对象没有prototype,

        最终Object.prototype.__proto__  指向的null

        Function.prototype === Function.__proto__  

        Function.prototype.__proto__ === Object.prototype
        实例对象的__proto__ 只想构造函数的 prototype
        构造函数的__proto__ (构造函数其实是一个对象) 当然具体构造函数名.prototype
        具体构造函数名.__proto__只想 Function.prototype 也等于  Function.__proto__
     
        上面就是一条回路了。现在清晰了吧
        
  • 相关阅读:
    .NET Framework 概述
    .Net笔试(二)
    EF CodeFirst 创建数据库
    C#中的继承
    SqlHelper 基类
    在C#中实现OOP概念
    索引器、委托和事件
    .Net笔试(一)
    HTML标签速记整理W3C
    Java函数调用总结
  • 原文地址:https://www.cnblogs.com/czkolve/p/10760002.html
Copyright © 2020-2023  润新知