Javascript 原型链

本文深入解析JavaScript中的函数和对象原型链机制,详细说明了[[Prototype]]、__proto__及prototype属性的作用,以及如何使用Object.create、Object.setPrototypeOf和Object.getPrototypeOf等方法构建和查询原型链。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 函数

函数包含3个属性:

[[Prototype]]:用于构建函数的原型链,内置函数和自定义函数都指向Function.prototype。

__proto__: 访问器属性,用于暴露内部属性[[Prototype]]。

prototype:函数特有的属性,函数构造的对象(实例)使用[[Prototype]]继承该属性。

大多数内置函数(包括Object函数)和自定义函数都指向Function.prototype,它是一个空函数Empty():

Number.__proto__ === Function.prototype  // true

Boolean.__proto__ === Function.prototype // true

String.__proto__ === Function.prototype  // true

Object.__proto__ === Function.prototype  // true

Function.__proto__ === Function.prototype // true

Array.__proto__ === Function.prototype   // true

RegExp.__proto__ === Function.prototype  // true

Error.__proto__ === Function.prototype   // true

Date.__proto__ === Function.prototype    // true

异常类:

TypeError.__proto__ === Error //true

ReferenceError.__proto__ === Error //true

2.对象

对象包含两个属性:

[[Prototype]]:用于构建对象的原型链,它继承构造函数的原型prototype。

__proto__: 访问器属性,用于暴露内部属性[[Prototype]]。

函数是对象的子类型,技术上讲,叫做“可调用对象”。函数和对象都是通过[[Prototype]]构建原型链。

3. 构建原型链

       Object.create( prototype) : 指定原型对象,创建一个对象链接到原型对象

      Object.setPrototypeOf(target,source):将一个target对象链接到source对象

      Object.getPrototypeOf(target):查询target对象的直接上级原型

       source.isPrototypeOf(target ): source对象是不是target对象的上级原型,不一定是直接上级

        var myObj1 = Object.create(Object.prototype);
        myObj1.name = "obj1";
        var myObj2 = Object.create(myObj1);
        myObj2.name = "obj2";
        var myObj3 = Object.create(myObj2);
        myObj3.name = "obj3";
        var myObj4 = {name:"obj4"};

        //将对象myObj4链接到myObj3
        Object.setPrototypeOf(myObj4,myObj3);

        //返回原型链的直接上级myObj3
        Object.getPrototypeOf(myObj4);//myObj3

        //myObj1是不是myObj4的上级原型(可以不是直接上级)
        myObj1.isPrototypeOf(myObj4);//true

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值