javascript实例无prototype属性,其通过[[prototype]]链隐式访问构造函数的prototype对象;实例自身不含prototype属性,但可通过__proto__或object.getprototypeof()获取原型,属性查找遵循原型链机制。

JavaScript 中实例本身不直接拥有 prototype 属性,而是通过内部的 [[Prototype]] 链(即隐式原型)访问构造函数的 prototype 对象上的属性和方法。
实例如何“访问” prototype 上的内容
当你用构造函数创建一个实例(如 new Foo()),该实例的内部属性 [[Prototype]] 会被设为该构造函数的 prototype 对象。这个连接是单向的、隐式的,不是通过实例自身的属性名 prototype 访问的。
- 实例没有名为
prototype的自有属性(obj.prototype === undefined) - 但实例可通过
__proto__(非标准但广泛支持)或Object.getPrototypeOf(obj)查看其原型对象 - 当访问实例的一个属性时,若实例自身没有该属性,JS 引擎会沿着
[[Prototype]]链向上查找,直到找到或到达null
prototype 是构造函数的属性,不是实例的
prototype 是**函数对象才有的属性**,普通对象(包括实例)没有这个属性。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Foo.prototype是一个对象,供所有new Foo()实例共享继承 -
const f = new Foo(); f.prototype→undefined -
f.__proto__ === Foo.prototype→true(可验证原型链关系)
正确查看和操作原型链的方式
避免依赖 __proto__ 修改原型(影响性能且不推荐),应优先使用标准 API:
- 查原型:
Object.getPrototypeOf(f)(推荐)或f.__proto__(仅调试) - 设原型:
Object.setPrototypeOf(f, newObj)(慎用) - 判断继承:
f instanceof Foo或Foo.prototype.isPrototypeOf(f) - 新增共享方法:修改
Foo.prototype.method = function(){...}
ES6 后更清晰的替代方案
使用 class 语法时,逻辑不变,但写法更直观:
-
class Foo { method() {} }等价于在Foo.prototype上定义method -
const f = new Foo(); f.method()仍靠原型链查找执行 -
Object.getPrototypeOf(f).constructor === Foo成立
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










