前端进阶(随手记)------原型链解析(__proto__和prototype的区别)

来源:互联网 发布:杜月笙评价知乎 编辑:程序博客网 时间:2024/05/22 03:21

一 基础知识:
在JS中,万物皆对象,方法(Function)是对象,原型也是对象(简称原型对象)。以下是基本概念:
1 函数对象:函数也是对象,简称函数对象。
2 原型:函数具有的一个属性叫做原型,这个属性指向一个另一个对象,(构成原型链的基础)。原型是属性(又称原型属性)也是是对象;原型的本质是对象。
3 原型对象:原型也是对象,简称原型对象。相当于你妈。
4 构造函数:构造函数就是啪啪啪啪,就是造人。产生下一代。
5 实例:啪啪啪之后,生出的人是实例。相当于是你。
6 _ proto _, 也称隐式原型,也可以写作[[prototype]],每个对象(包括对象和函数)都存在这个原型。其作用是:构成原型链。
7 prototype ,也称显示原型,是函数特有的属性。显式原型的作用是:用来实现基于原型的继承与属性的共享。
特殊:(1)Object的显示原型是Object .prototype(凭空出来的) 、Function的显示原型是Function .prototype。

二 指向关系
1 : 隐式原型(_ proto _)指向定义:隐式原型指向创建这个实例对象(相当于你)的函数(相当于你妈)的显式原型(prototype)。
备注a:(因为显示原型是对象,所以又可以说隐式原型指向原型对象)。
备注b:更直接一点,就是找你妈的子宫。
备注c: 由于你可能是(1)你妈和你爸啪啪啪来的;(2)你把的精子和其他女人的卵子经过试管得到的;(3)你是抱养来的。所以寻找你妈就有三种方式。
(第一种情况1:这个对象是通过对象字面量构造出来的。对象(person_1)的_ proto _指向Object .prototype

var person1 = {  name: '张三',                 sex: 'male'               };

(第二种情况2:这个对象是由构造函数构造出来的。实例对象(person_2)的_ proto _指向Person .prototype

function Person(name,sex){        this.name=name;        this.sex=sex;  }var person_2 = new Person("李四",male);

(第三种情况3:这个对象是由函数Object.create构造的。实例对象(person_3)的_ proto _指向person00 .prototype

var person00 = {name: 'cyl',                sex: 'male'              };var person_3 = Object.create(person00);

2 :显示原型的指向定义:是以当前函数作为构造函数构造出来的对象的原型对象,(显示原型指向函数的原型对象)。
`
function Foo() {}
var foo = new Foo();
console.log(foo.prototype);// undefined

网很多讲的多是隐式原型, 显示原型待研究,后续补上………….

3:介于本人技术有限,很多知识只是了解皮毛,放上大牛的文章链接:js中proto和prototype的区别和关系?:https://www.zhihu.com/question/34183746
JavaScript 内置对象与原型链结构:https://zhuanlan.zhihu.com/p/22181782

0 0