Vue学习前置内容:原型和原型链

对应名称

prototype: 原型
__proto__: 原型链(连接点)

从属关系

prototype --> 函数的一个属性: 对象 {}
__proto__  --> 对象Object的一个属性; 对象{}

原型

在这里插入图片描述

原型链

原型链的长度:
在这里插入图片描述

执行下面步骤:仔细看看,一看就懂什么是原型链
在这里插入图片描述

对象的__proto__保存着该对象的构造函数的prototype

function Test() {
    
    
	this.a =1;
}

const test = new Test();
Test.prototype.b =2;
Object.prototype.c = 3;


test {
    
    
	a: 1,
	__proto_: Test.prototype  {
    
    
		b: 2,
		__proto__: Object.prototype {
    
         // Object.prototype顶层的属性
			c:3
			//无__proto__属性
		}
	}
}

在这里插入图片描述

Function 和 Object的特殊性

//底层:
//const Test = new Function();
Function.__proto__ === Function.prototype;   //true

//底层:
// const obj = {};
// const obj = new Object();   obj也是一个Function
Object.__proto__ === Function.prototype;   // true
Object.__proto__ === Object.__proto__;     //true

constructor: 实例化test对象的构造函数

	function Test() {
    
    
	    a: 1
	};  
	const test = new Test();
	console.log(test.constructor);
	//输出
	//  function Test() {
    
    
	//      a: 1
	//  };  

constructor可以被修改

注意点:

proto 并不是语言本身的特性,这是各大厂商具体实现时添加的私有属性,虽然目前很多现代浏览器的 JS 引擎中都提供了这个私有属性,但依旧不建议在生产中使用该属性,避免对环境产生依赖。生产环境中,我们可以使用 Object.getPrototypeOf 方法来获取实例对象的原型,然后再来为原型添加方法/属性。

猜你喜欢

转载自blog.csdn.net/LookForDream_/article/details/128653881
今日推荐