前端开发js里的__proto__和prototype的理解和区别

1. 概念说明

  1. 在js里,万物皆对象。方法(Function)是对象,原型(Function.prototype)是对象。实例(new Function)也是对象,因此,它们都会具有对象共有的特点。
    所以这里涉及到对象有函数对象,原型对象、实例对象,说明的时候可以省略了对象两个字方便在说法上有区别,不然容易搞混把自己搞晕了。

  2. 实例对象是由函数对象实例化出来的。

  3. 原型对象是由函数对象包含所有实例共享的属性和方法形成的。

  4. __proto__属性确切的名称是[[prototype]],因为[[prototype]]只是一个标准,而针对这个标准,不同的浏览器有不同的实现方式,在主流的浏览器中,都用__proto__来代表[[prototype]]属性

  5. __proto__属性存在于函数、原型、实例当中都有的,它是形成原型链的关键属性

  6. prototype属性是只有函数才特有的属性,当你创建一个函数时,js会自动为这个函数加上prototype属性,值是一个空对象。所以,函数在js中是非常特殊的,是所谓的一等公民

2. __proto__和prototype关系

参考文章:https://www.cnblogs.com/caihongmin/p/17993066

person1.__proto__==person2.__proto__==Person.prototype,都是指向了原型,(项目开发一般通过prototype给原型添加通用方法,然后实例就可以直接使用),关系如下:

原型链是通过 __proto__属性关联起来的,(我们平时项目开发很少直接使用__proto__这个属性):

posted @ 2024-12-27 11:32  yongfengnice  阅读(122)  评论(0)    收藏  举报