了解javascript中的prototype与 __proto__

本文深入探讨了JavaScript中prototype和__proto__的概念及其作用。解释了prototype如何允许新关键字和构造器创建的对象共享属性,以及__proto__如何在对象查找属性时构成原型链。通过实例演示了如何使用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们先来看一个函数。

function person() {

 

}

这个函数我们使用chrome观察其运行情况,可以看到Person有两个属性,一个是prototype,一个是__proto__

。其中prototype是每个函数(只有函数才有这个属性)的属性。而__proto__是js对象的属性,即只要是js对象,都有这个属性。比如

var arr = [],var obj = {}等等,都有__proto__。

如下图所示:



 

那prototype有什么作用呢?

  new 关键字和Person构造器创建的所有的对象都共享prototype上的属性。比如

function person() {

 

}

person.prototype.name='共享名称';

var p = new Person();

var p1 = new Person();

p.name === p1.name //值为true。

这正是原型的意义所在。

那__proto__有什么用呢?

我们继续使用上面的代码做说明:

如果我们调用p.age,那么js就会在p1对象上查找age变量是否存在,如果p对象上不存在该属性,js就会在

p.__proto__属性指向的Person.prototype(p.__proto__===Person.prototype //值为true)上查找,如果Person.prototype上找不到属性,js就会在Person.prototype.__prototype__属性指向的Object.prototype属性上查找。如果该属性上也查找不到,那么p.age值就会为undefined。

通过这个例子应该清楚了__protype__的作用了:正是__prototype__构成了原型链。上面所面试的原型的指向是否正确,可以通过下图得到验证:



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值