2021-09-16 终极原型链

本文深入探讨了JavaScript中的原型链机制,包括prototype、_proto_、constructor等概念。讲解了所有对象如何从Object.prototype继承,以及Function的自我创建过程。特别指出,Object的原型的隐式原型指向null,形成原型链的终点。

prototype:构造函数的属性(显示原型),内部保存的是该构造函数的显示原型对象的地址
_ _ proto_ _:实例对象的属性(隐式原型),指向其构造函数的显示原型
constructor:是构造函数显示原型对象上的一个属性 指向这个原型对象对应的构造函数
Object:所有的对象(包括属性 constructor )都是由Object用new创建的,它们都会从 Objet.prototype 继承属性和方法 Person1.constructor= = =Person
Function: 所有的函数(包括构造函数)都是由Function 用new创建的
Function自己创建自己(Function自己new自己)
Object的显示原型的隐式原型指向为null
所有的构造函数都有prototype
所有的实例都有 _ _ proto _ _
实例的隐式原型指向其构造函数的显示原型

原型链的终点 (关于Object的原型的隐式原型为null)
0x200 是Computer的原型对象 也是Object的实例化对象 所以0x200的隐式原型指向Object的现实原型(0x500)
0x500 是Object的原型对象 同时也是Object的实例化对象
0x500 作为Object的实例化对象 其 _ _ proto _ _ 应该指向 Object的显示原型 => 0x500
如果这个时候访问一个方法 找到了0x500 如果当它自身没有时 会顺着自己的 _ _ proto _ _ 找到0x500
所以因为出现了这种死循环 作者将Object的原型对象的 _ _ proto _ _ 属性 设置为null 作为原型链的终点


举个栗子
		function Person(name, age) {
            this.name = name;
            this.age = age;
        }
        Person.prototype.grade = function () {
            console.log('毕业啦');
        }
        var Person1 = new Person('夜游', '18');
        console.log(Person1);

在这里插入图片描述

	//实例的隐式原型指向其构造函数的显示原型
	Person1.__proto__ === Person.prototype
	//构造函数的显示原型的constructor属性指向构造函数本身 constructor是构造函数的显示原型的一个属性
	Person.prototype.constructor === Person  === Person1.__proto__.constructor
	//所有的对象都会从其原型上继承一个constructor属性
	Person1.constructor === Person
	Person.constructor === Function
	//构造函数的隐式原型指向Function的显示原型 因为构造函数都是由Function 用new关键字创建的 即构造函数是Fucntion的实例 符合实例的隐式原型指向构造函数的显示原型
	Person.__proto__ === Function.prototype
	Person.prototype.__proto__===Object.prototype
	
	
	
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值