原型和原型链

本文深入探讨JavaScript中的原型和原型链概念,包括prototype和__proto__的区别、对象构造函数的关联、原型链继承以及Function与Object的关系。通过实例解析了如何通过原型链实现属性查找,并介绍了hasOwnProperty和in操作符在判断属性存在性中的应用。同时,阐述了constructor属性的用法及其可变性。
摘要由CSDN通过智能技术生成

原型和原型链

名称

prototype:原型
__proto__:原型链(准确说为原型链的节点,所有节点构成的关系链才是原型链)

从属关系

prototye:函数属性
__proto__:Object属性

两者都是对象
!!!对象的__proto__保存着该对象的构造函数的prototype!!!

基本认知

function a(){}
console.log(a.prototype)	//函数a的构造函数constructor

let b = new a;
console.log(b.__proto__)	//函数a的构造函数constructor

console.log(a.prototype === b.__proto__);	//true
//综上:对象的__proto__保存着该对象的构造函数的prototype

console.log(a.prototype.__proto__ === Object.prototye)	//true
console.log(Object.prototye.__proto__)	//null
//综上,原型链顶层为Object.prototype

原型链继承

function a(){
    this.x = 1;
};
console.log(a);

/*
	a{
		prototype:{
			constructor:f a()	---a自身
			__proto__:Object.prototype:{
				...
			}
			...
		}
		__proto__:{
			f() 		---Function
			...
		}
		...
	}
*/

a.prototype.y = 2;
Object.prototype.z = 3;
let b = new a();
console.log(b.x);	//1
console.log(b.y);	//2
console.log(b.z);	//3
console.log(b);	//b -> a -> Object

/*
	b{
		a:1,
		__proto__:{
			a.prototype:{
				y:2,
				__proto__:{
					Object.prototype:{
						z:3,
						...
					}
					...
				}
				...
			}
			...
		}
	}
*/

Function与Object

//Function与Object既是对象也是函数
function a(){};
console.log(a.__proto__);	//f{} 	---Function.prototype
console.log(a.__proto__ === Function.prototype)		//true
console.log(Function.prototype === Function.__proto__)	//true

//function a(){} 与	var a = new Function()
//let obj = {} 与	let obj = new Object()

console.log(Function.prototype === Object.__proto__)	//true
console.log(Function.__proto_ === Object.__proto__)		//false

属性是否存在判断方法

对象内置方法:object.hasOwnProperty();	//查找本身属性
'属性' in object	//查找整个链上的属性

构造函数constructor

//实例化对象的constructor属性 -> 实例化对象的构造函数
fucntion a(){
    this.x = 1;
}
let b = new a();

console.log(b.constructor === a)	//true

//constructo允许更改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值