当前位置:网站首页>js __proto__、prototype、constructor的关系
js __proto__、prototype、constructor的关系
2022-08-02 03:23:00 【星雨668】
一、 前言
这篇文章涉及到js的原型和原型链,对这块内容不熟悉的同学,可以移步:js 的原型和原型链 这篇文章先了解一下。
二、什么是constructor?
constructor 是每个引用类型(数组,对象,函数)都会拥有的一个属性,而且这个属性指向了创建当前这个实例对象的构造函数(类)。
class Foo{};
let f1 = new Foo();
console.log(f1); // {} 是一个空对象
console.log(f1.__proto__); // {constructor: ƒ} 指向原型对象
console.log(f1.constructor); // class Foo{}
console.log(f1.__proto__.constructor) // class Foo{}
console.log(f1.constructor === f1.__proto__.constructor ); // true
console.log(f1.__proto__ === Foo.prototype) // true 由此可得 f1的constructor属性是继承父类所得
解读:1、实例对象 f1是由类Foo所创建的,所以f1.constructor 指向了类Foo;
2、f1的constructor属性是继承父类所得。
在 js 的原型和原型链 这篇文章中提到:
1、__ proto__ 属性,也叫隐式原型,它是一个普通的对象,所有引用类型都有该属性(数组,对象,函数);
2、prototype属性,这也叫显式原型,它也是一个普通的对象,是函数所独有的属性。
3、对象的__ proto__属性指向它的构造函数的prototype属性。
三、constructor、__ proto__、prototype关系图解
如图:
解读:
1、f1是Foo实例化所得;
f1.__ proto__指向 Foo.prototype;
Foo.prototype__ proto__指向Object.prototype;
Object.prototype.__ proto__ 指向 null; (原型链的流程)
2、constructor属性就是指向该对象的构造函数;
f1.constructor 继承于Foo.prototype并指向构造函数(类) class Foo;
Foo.constructor 继承于 Function.prototype 并指向构造函数(类)Function();
3、__ proto__属性是“隐式原型”,对象的__ proto__属性指向它的构造函数的prototype属性,所以f1.__ proto__ === Foo.prototype;
prototype属性,是“显式原型”,它的作用就是包含所有实例共享的属性和方法,也就是让该构造函数所实例化的对象们都可以在这里找到公用的属性和方法;
任何函数在创建的时候,其实会默认同时创建该函数的prototype对象;
边栏推荐
猜你喜欢
随机推荐
针对简历上的问题
[Learning Records of Boxue Valley] Super summary, share with heart | Software Testing Interface Testing Basics
ssm various configuration templates
骨架效果 之高级渐变,适用图片等待时
猴子选大王
page load process
js作用域与闭包
Basic usage of Monaco Editor
Error in render: “TypeError: Cannot read properties of null (reading ‘0‘)“ 报错解决方案
C语言入门小游戏—三子棋
解决glob()返回文件排序不一致问题&onnx本地按照安装方法
C语言 void和void *(无类型指针)
环形链表---------约瑟夫问题
Redis simple study notes
COCO数据集训练TPH-YoloV5
【手把手带你学nRF52832/nRF52840 · (1)开发环境搭建】
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boo
每日五道面试题 2022/7/27
5.20今日学习
最新,每天填坑,Jeston TX1 精卫填坑,第一步:刷机