面向对象中的原型

JavaScript 中的原型

原型的基本概念

在 JS 中,每个对象都有一个内部属性 [[prototype]] (通过 proto 访问),指向它的原型对象。原型对象也是一个普通对象,它有自己的属性和方法,并且也可以有自己的原型,从而形成原型链。

当访问一个对象的属性或方法时,如果对象本身没有该属性或方法,JS 会沿着原型链向上查找,直到找到该属性或到达原型链的末端 (null)。

JS 通过原型机制实现了继承,即对象(实例)可以共享原型对象的属性的方法。

原型链

原型链是 JS 实现继承的核心机制,原型链是由对象的 [[Prototype]] 属性连接起来的一条链。当访问一个对象的属性或方法时,JavaScript 会按照以下顺序查找:

  1. 对象本身。

  2. 对象的原型([[Prototype]])。

  3. 原型的原型,依此类推,直到找到属性或到达 null。

例如:

javascript 复制代码
const parent = {
    greet() {
        console.log("Hello from parent!");
    }
};

const child = Object.create(parent); // child 的原型是 parent
child.greet(); // 输出: Hello from parent!

在这个例子中,child 对象本身没有 greet 方法,但它通过原型链访问了 parent 对象的 greet 方法。

原型链的终点是 null。例如:

javascript 复制代码
console.log(Object.getPrototypeOf(Object.prototype)); // 输出: null

构造函数与 prototype

在 JS 中,函数也是对象,每个函数都有一个 prototype 属性。当使用 new 关键字调用函数时,会创建一个新对象,并将该对象的 [[prototype]] 指向函数的 prototype 属性。例如:

javascript 复制代码
function Person(name) {
    this.name = name;
}

Person.prototype.greet = function() {
    console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person("Alice");
person1.greet(); // 输出: Hello, my name is Alice

在这个例子中,Person 是一个构造函数。Person.prototype 是 person1 对象的原型。person1 继承了 Person.prototype 的 greet 方法。

prototype 和 proto 的区别

prototype 是函数对象特有的属性,指向一个对象。当该函数作为构造函数时,prototype 会成为新创建对象的原型。

proto 是对象的内部属性,指向其原型对象。虽然现代 JavaScript 推荐使用 Object.getPrototypeOf() 和 Object.setPrototypeOf(),但 proto 仍被广泛使用。

相关推荐
方见华Richard6 小时前
整数阶时间重参数化:基于自适应豪斯多夫维数的偏微分方程正则化新框架
人工智能·笔记·交互·原型模式·空间计算
方见华Richard2 天前
世毫九《认知几何学修订版:从离散概念网络到认知拓扑动力学》
人工智能·经验分享·交互·原型模式·空间计算
方见华Richard2 天前
自指系统的安全本体论:论内生安全性的哲学基础与形式化路径
人工智能·经验分享·交互·学习方法·原型模式
xianyinsuifeng2 天前
RAG + Code Analysis 的标准路线
数据仓库·自动化·云计算·原型模式·aws
Beginner x_u4 天前
JavaScript 原型、原型链与原型继承的核心机制解析
开发语言·javascript·原型模式·原型原型链
方见华Richard5 天前
递归对抗引擎(RAE)核心极简实现框架
人工智能·交互·学习方法·原型模式·空间计算
方见华Richard5 天前
递归对抗引擎RAE V2.0(多智能体分布式对抗版)
人工智能·经验分享·交互·学习方法·原型模式
方见华Richard5 天前
递归对抗引擎RAE V3.0(碳硅共生版)
人工智能·经验分享·学习方法·原型模式·空间计算
懵萌长颈鹿6 天前
原型模式 (Prototype Pattern)
原型模式
2601_949480067 天前
Flutter for OpenHarmony音乐播放器App实战:定时关闭实现
javascript·flutter·原型模式