【ES6】js中的__proto__和prototype

在JavaScript中,__proto__和prototype都是用于实现对象继承的关键概念。

1、proto

__proto__是一个非标准的属性,用于设置或获取一个对象的原型。这个属性提供了直接访问对象内部原型对象的途径。对于浏览器中的宿主对象和大多数对象来说,可以使用 obj.proto 访问它们的原型对象。但是,不建议使用这个非标准属性,因为它在未来的标准中可能会被废弃。

例如:

javascript 复制代码
let obj = {};
console.log(obj.__proto__); // [object Object]
2、Prototype

每个JavaScript对象都有一个prototype属性,这个属性是一个指向该对象的原型对象(prototype object)的引用。当一个对象被创建时,它的prototype属性就被设置为其构造函数的prototype属性。这个原型对象自身也有一个prototype属性,这个属性指向的是Object.prototype。

在JavaScript中,所有的对象都是从其原型对象继承的。当访问一个对象的属性或方法时,如果该对象自身没有这个属性或方法,那么JavaScript就会在这个对象的原型对象中查找这个属性或方法,如果原型对象中也没有,那么就会继续在原型对象的原型对象(也就是Object.prototype)中查找。

在JavaScript中,所有函数都有一个prototype属性,这个属性是一个包含一个constructor属性(指向函数自身)和一个proto属性的对象。这个proto属性就是函数的原型对象。

例如:

javascript 复制代码
function MyFunction() { }
console.log(MyFunction.prototype); // [object Object]

总的来说,__proto__和prototype都是用来实现对象继承的,但__proto__是非标准的,建议使用Object.getPrototypeOf()和Object.setPrototypeOf()这样的标准方法来获取和设置一个对象的原型。

相关推荐
Agent世界1 小时前
用 CDP 做发布自动化:四道机器闸门与产物验收
前端·javascript
总要学点什么2 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
程序员大阳2 小时前
副队长ES6+教程(3)--解构赋值
前端·javascript·es6·赋值·解构
神膘护体小月半2 小时前
css - 元素背景图由 hover 触发,初次加载时闪动的解决办法
前端·javascript·css
程序员大阳2 小时前
副队长ES6+教程(2)--let 与 const
前端·javascript·es6·const·let·var
曦樂~3 小时前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
程序员大阳4 小时前
副队长ES6+教程(1)--ES6+初识
前端·ecmascript·es6
码云社区4 小时前
智慧物业系统选型指南:房屋档案、账单管理与报修协作
前端·javascript·vue.js·智慧物业
code_Bo17 小时前
不只命令行:我把跨 Agent 会话同步做成了桌面应用
前端·javascript·后端
kyriewen18 小时前
AI 能把页面写出来,为什么改个需求就开始崩?
前端·javascript·人工智能