上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

JS原型链

[复制链接]
  • TA的每日心情

    5 小时前
  • 签到天数: 50 天

    [LV.5]常住居民I

    141

    主题

    513

    帖子

    813

    积分

    版主

    Rank: 8Rank: 8

    积分
    813

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-2-25 18:54:44 | 显示全部楼层 | 阅读模式

    本帖最后由 小陈 于 2021-2-25 18:56 编辑

    js原型链

    首先我们要知道任何对象都有一个proto属性
    任何的方法都有prototype属性,prototype也是一个对象,也是有proto属性的

    image.png

    定义一个函数fn,调试出它的prototype属性,可以看到结果中有constructor和proto

    constructor指向函数自己。同时可以看见prototype中也有proto

    JS创建对象

    第一种是通过构造函数创建对象

    var obj=new Object();

    第二种是object.create创建对象

    var obj1={};
    var obj2= Object.create(obj1);
    

    第三种花括号创建

    var obj={};

    所有的对象中都有proto属性,这个属性就是一个指针,指向构造函数中的prototype属性。

    image.png

    所有对象的proto指向创建它们的构造函数的prototype

    image.png

    我们验证一下。

    image.png

    image.png

    总结

    1函数对象有proto和prototype属性
    2非函数对象只有proto属性
    3prototype中有proto属性。且是Object构造函数创建的
    4函数对象proto指向它的创建者及Function构造函数
    5Function构造函数proto指向它自己
    6Object对象的prototype中的proto是null

    image.png
    image.png
    bilibili:陈公子的话   公众号:陈公子的话
  • TA的每日心情

    5 小时前
  • 签到天数: 50 天

    [LV.5]常住居民I

    141

    主题

    513

    帖子

    813

    积分

    版主

    Rank: 8Rank: 8

    积分
    813

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-2-25 19:55:34 | 显示全部楼层
    首先知道javascript所有对象都是object实例,并且继承Object.prototype的属性和方法

    当我们定义函数a的时候,会自动生成一个prototype对象,那prototype对象,它是对象他就有__proto__属性,那函数a.prototype.__proto__其实就是Object.prototype

    当我们定义一个对象b的时候,会自动生成__proto__属性,那么b.__proto__其实就是构造函数B.prototype   再延伸一下B.prototype.__proto__又回到我们说的Object.prototype

    原型链是什么呢   

    对象都有toString这个方法,就像上面说的实例化对象b,b本身没有tostring这个方法,然后通过__proto__方法向上延伸,b.__proto__其实就是B.prototype,构造函数B也没tostring这个方法,继续通过__proto__向上找,B.prototype.__proto__也就是Object.prototype有tostring这个方法 ,实例化对象b才继承了这个方法

    这个过程中Object.prototype = b.__proto__.__proto__
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2603

    帖子

    2666

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2666

    猫咪币纪念章

    发表于 2021-2-26 00:24:28 | 显示全部楼层
    考试题:
    function CreateObj(){
    this.a=888;
    }
    var a=new CreateObj
    a.__proto__===?
    CreateObj.prototype.__proto__===?
    CreateObj.__proto__===?
    Function.__proto__===?
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情

    5 小时前
  • 签到天数: 50 天

    [LV.5]常住居民I

    141

    主题

    513

    帖子

    813

    积分

    版主

    Rank: 8Rank: 8

    积分
    813

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-2-26 15:20:18 | 显示全部楼层
    a.__proto__ ===CreatObj.prototype
    CreateObj.prototype.__proto__=== Object.prototype
    CreateObj.__proto__=== CreateObj.constructor.prototype
    Function.__proto__===Function.prototype
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

  • TA的每日心情

    5 小时前
  • 签到天数: 50 天

    [LV.5]常住居民I

    141

    主题

    513

    帖子

    813

    积分

    版主

    Rank: 8Rank: 8

    积分
    813

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-2-26 15:28:20 | 显示全部楼层
    CreateObj.__proto__=== CreateObj.constructor.prototype===Function.__proto__===Function.prototype
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

  • TA的每日心情

    5 小时前
  • 签到天数: 50 天

    [LV.5]常住居民I

    141

    主题

    513

    帖子

    813

    积分

    版主

    Rank: 8Rank: 8

    积分
    813

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-2-26 15:33:59 | 显示全部楼层
    a.__proto__ ===a.constructor.prototype===CreatObj.prototype
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2603

    帖子

    2666

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2666

    猫咪币纪念章

    发表于 2021-2-26 18:44:15 | 显示全部楼层
    小陈 发表于 2021-2-26 15:33
    a.__proto__ ===a.constructor.prototype===CreatObj.prototype

    ggnb!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表