• 08-JS对象、原型及原型链


    一、对象

    1、创建对象

    字面量方式:

    var obj={
        name: "liuyan",
    }
    
    • 1
    • 2
    • 3

    内置构造函数创建对象:

    var obj = new Object()
    obj.name='liuyan'
    obj.aage=18
    
    • 1
    • 2
    • 3

    工厂函数创建

    function createObj(){
        var obj = {}
        obj.name = 'liu'
        obj.han= function(){}
        return obj
    }
    var obj = createObj()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    自定义构建函数

    function CreateObj(){   #首字母大写规范
        #this指向当前实例
        this.name = 'Jack'
        this.age = 18
        this.sayhi=function(){}
    }
    var obj1 = new createObj()
    
    #函数内部不需要写return
    #如果写了,return简单数据类型没有用,return复杂类型数据会覆盖构造的属性
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2、自定义构造函数的不合理性:

    使用构造函数创建的对象p1和p2:
    p1 不等于 p2 ——>两个不同的对象
    p1.sayhi 不等于p2.sayhi ——>两个不同的函数
    这样会造成创建一次对象,就会有一个一摸一样的函数占用空间

    3、解决自定义构造函数不合理问题

    原型

    每一个构造函数天生自带prototype属性,是一个对象数据类型。
    创建的对象自带__proto__属性,指向所属构造函数的protype。在访问对象自己的属性时,如果没有找到,就会去__proto__上查找,从而查询所属构造函数的prototype

    将公共方法属性添加到构造函数原型上,其所有对象创建后,通过自己__proto__属性指向的构造对象的prototype原型上去获取,不需要每个对象都创建相同资源。可以使用对象的操作语法向里面添加内容

    //构造函数
    function Person(){
    }
    //构造函数原型上添加sayhi函数
    Person.prototype.sayhi=function(){}
    //创建对象
    h1=new Person()
    h2=new Person()
    //调用对象中的sayhi函数
    h1.sayhi
    console.log(h1.saihi === h2.sayhi)    #true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    属性:直接写在构造函数体内
    方法:写在构造函数原型上

    原型链

    对象是Object的实例,所有的原型链都会汇集此处
    函数是Function的实例

    Object的prototype是顶级原型,proto__值为null
    函数访问机制:
    1、首先查找自己的对象成员,如果有直接使用
    2、如果没有,查询__proto
    ,也就是自己所属的构造函数的prototype对象
    3、如果还是没有,则查询所属构造函数prototype对象的__proto__,也就是Object的prototype对象
    4、如果没有找到则返回null
    在这里插入图片描述

  • 相关阅读:
    C语言8道大厂指针笔试题——拿捏指针
    leaflet入门使用教程
    zookeeper 常见问题处理
    大文件传输小知识 | UDP和TCP哪个传输速度快?
    K8s 之 ReadinessProbe(就绪探针)使用的迷惑
    linux脚本,导出oracle(spool)指定数据到txt
    Nodejs使用pkg的官方文档翻译
    Revit二次开发——轴网
    【uniapp/uview1.x】u-upload 在 v-for 中的使用时, before-upload 如何传参
    Ubuntu安装Samba(阿里云服务器、samba端口映射)
  • 原文地址:https://blog.csdn.net/CapejasmineY/article/details/126231961