16-[prototype]显式原型&[__proto__]隐式原型

本文详细阐述了JavaScript中function的显式原型prototype与实例对象的隐式原型__proto__的关系,以及它们如何影响对象的方法查找和继承。通过实例和内存结构图,讲解了原型的默认值、操作方式和作用机制。
摘要由CSDN通过智能技术生成
  1. 每个function函数都有一个prototype,即显式原型(属性)
  2. 每个实例对象都有一个__proto__,即隐式原型(属性)
  3. 实例对象的隐式原型的值为:其对应的构造函数的显式原型的值

源代码:

// 定义构造函数
function Fn () { // 内部语句:this.prototype = {}
}

// 1. 每个函数function都有一个prototype,即显式原型属性,默认指向一个空的Object对象
console.log(Fn.prototype)

// 2. 每个实例对象都有一个__proto__,即隐式原型属性
// 创建实例对象
var fn = new Fn() // 内部语句:this.__proto__ = Fn.prototype
console.log(fn.__proto__)

// 3. 对象的隐式原型的值为:其对应构造函数的显式原型的值
console.log(Fn.prototype === fn.__proto__) // true

// 给原型添加方法
Fn.prototype.test = function () {
  console.log('test()')
}

// 通过实例调用原型的方法
fn.test()

内存结构图如下:
在这里插入图片描述
总结:

  • 函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空Object对象
  • 实例对象的__proto__属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性的值
  • 程序员能直接操作显式原型, 但不能直接操作隐式原型(ES6之前)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值