您当前的位置:首页 > 文章 > 原型模式:prototype 和 __proto__

原型模式:prototype 和 __proto__

作者:Lee_Yu_Fan 时间:2024-01-08 阅读数:268 人阅读
是什么?
prototype(显示原型):每个函数都有一个prototype属性
__proto__(隐式原型):每个实例对象都会有__proto__属性
两者有什么关系?
        一般,构造函数的显示原型和其实例对象的隐式原型是指向同一个地方的,这个地方叫做原型对象

//构造函数
function Person(){}
//p1实例对象
let p1 = new Person()
console.log(Person.prototype === p1.__proto__) // true

  在js中有一句话叫:万物皆对象!(那也可以理解成在js中万物都包含__proto__属性吧)

let num = 1
console.log(num.__proto__ === Number.prototype) //true
let str = 'abc'
console.log(str.__proto__ === String.prototype) //true
let n = true
console.log(n.__proto__ === Boolean.prototype) //true
let obj = {}
console.log(obj.__proto__ === Object.prototype) //true
function fn(){}
console.log(fn.__proto__ === Function.prototype) //true
      
console.log(Object.__proto__ === Function.prototype) //true
console.log(Number.__proto__ === Function.prototype) // true
console.log(Function.__proto__ === Function.prototype) //true

 可以看出:

number类型的数据是Number构造函数的实例
函数是Function构造函数的实例
Object、Number、function Function()等其实本质上也是一个函数,所以他们也都是Function构造函数的实例
Object的隐式原型是null
面试题:什么是原型?什么是原型链?
原型:原型分为显示原型和隐式原型,每个对象都有一个隐式原型,它指向自己的构造函数的显示原型

原型链:就是多个实例对象的__proto__组成的集合 

所有实例的__proto__都指向他们构造函数的prototype
所有的prototype都是对象,自然他们的__proto__指向Object()的prototype
所有的构造函数的隐式原型指向的都是Function()的显示原型
Object的隐式原型是null
————————————————
版权声明:本文为CSDN博主「Lee_Yu_Fan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_73334325/article/details/135385406

本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com

标签:JavaScript