javaScript面向对象的程序设计(二)——原型和原型链

本文深入探讨JavaScript中函数的原型对象与原型链的工作机制,包括构造函数、prototype属性、constructor属性以及对象的[[Prototype]]属性,阐述了属性查找机制及引用类型特性。

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

概述

在JavaScript中,我们创建一个函数A(就是声明一个函数), 那么浏览器就会在内存中创建一个对象B,函数默认会有一个属性 prototype 指向了这个对象( 即:prototype的属性的值是这个对象 )。这个对象B就是函数A的原型对象,简称函数的原型。这个原型对象B 默认会有一个属性 constructor 指向了这个函数A ( 意思就是说:constructor属性的值是函数A )。
prototype属性 它是一个对象— 原型对象

此处输入图片的描述

原型链

对象中的原型的指向

此处输入图片的描述

多个new对象的原型的指向

此处输入图片的描述

关于原型中的各个属性和属性值的说明:

  • prototype属性:prototype 存在于构造函数中 ,他指向了这个构造函数的原型对象。

  • constructor属性:constructor属性存在于原型对象中,他指向了构造函数

Person.prototype.constructor === Person // true
  • proto 属性:
    用构造方法创建一个新的对象之后,这个对象中默认会有一个不可访问的属性 [[prototype]] , 这个属性就指向了构造方法的原型对象。
    但是在个别浏览器中,也提供了对这个属性[[prototype]]的访问(chrome浏览器和火狐浏览器。ie浏览器不支持)。访问方式_proto_

  • hasOwnProperty():可以判断一个属性是否来自对象本身
    访问一个对象的属性的时候,这个属性既有可能来自对象本身,也有可能来自这个对象的[[prototype]]属性指向的原型。

  • in 操作符:判断一个属性是否存在于这个对象中
    对象属性的方法属性的搜索机制,首先在对象本身中找,如果对象找不到再去原型中找。只要对象和原型中有一个地方存在这个属性,就返回tru。

总结

  • 所有的引用类型(数组,对象,函数),都具有对像特性,即可自由扩展属性(除了null)
  • 所有的引用类型(数组,函数,对象),都有一个proto属性,属性值是一个普通对象
  • 所有的函数,都有一个 prototype 属性,属性值也是一个普通的对象
  • 函数的 prototype 称显式原型,引用类型的 _proto 成为隐式原型
  • 所有的引用类型(数组,函数,对象),其 proto属性值都指向其构造函数的 prototype 属性值
  • 当试图获取一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的prot_(即它的构造函数的prototype)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值