news 2026/5/8 13:37:19

JavaScript 对象与原型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript 对象与原型

目录

JavaScript 对象创建方式详解

1.1 构造函数创建对象

1.2 对象字面量创建对象

1.2.1 基本语法

1.2.2 访问对象成员

1.2.3 遍历对象属性

1.2.4 this 关键字

1.3 工厂模式创建对象

1.4 构造函数模式

1.4.1 基本用法

1.4.2 new 的执行过程

1.4.3 优化方法定义

1.5 原型模式

1.5.1 原型对象

1.5.2 原型链

1.6 垃圾回收

1.7 ES6 Class 语法

JavaScript 对象创建方式详解

1.1 构造函数创建对象

1.2 对象字面量创建对象

1.2.1 基本语法

1.2.2 访问对象成员

1.2.3 遍历对象属性

1.2.4 this 关键字

1.3 工厂模式创建对象

1.4 构造函数模式

1.4.1 基本用法

1.4.2 new 的执行过程

1.4.3 优化方法定义

1.5 原型模式

1.5.1 原型对象

1.5.2 原型链

1.6 垃圾回收

1.7 ES6 Class 语法


JavaScript 对象创建方式详解

1.1 构造函数创建对象

使用new Object()构造函数创建对象是最基础的方式:

var obj = new Object(); obj.name = "张三"; obj.gender = "男"; obj.age = 18;

特点:

  • 使用new关键字调用构造函数
  • 语法较为冗长
  • 主要用于理解对象的基本概念

1.2 对象字面量创建对象

1.2.1 基本语法

对象字面量提供更简洁的创建方式:

var obj = { name: "猪八戒", age: 28, gender: "男", sayHi: function() { console.log("hi~"); } };

注意事项:

  • 采用键值对形式定义属性
  • 多个属性间用逗号分隔
  • 方法本质上是匿名函数

1.2.2 访问对象成员

// 点语法访问 console.log(obj.name); // 方括号访问 console.log(obj["age"]); // 调用方法 obj.sayHi();

1.2.3 遍历对象属性

使用for...in循环遍历对象:

for (var prop in obj) { console.log(`属性名:`+n); console.log(`属性值:`obj[n]); }

1.2.4 this 关键字

this的指向规则:

  1. 函数调用:指向 window
  2. 方法调用:指向调用对象
  3. 构造函数调用:指向新对象
function showName() { console.log(this.name); } var obj1 = { name: "孙悟空", show: showName }; var obj2 = { name: "沙和尚", show: showName }; showName(); // 全局 obj1.show(); // 孙悟空 obj2.show(); // 沙和尚

1.3 工厂模式创建对象

解决批量创建对象问题:

function createPerson(name, age) { var obj = new Object(); obj.name = name; obj.age = age; return obj; }

缺点:

  • 对象类型无法区分
  • 构造函数均为 Object

1.4 构造函数模式

1.4.1 基本用法

function Person(name, age) { this.name = name; this.age = age; this.sayHi = function() { console.log("Hi"); }; } var p1 = new Person("张三", 20);

特点:

  • 首字母大写约定
  • 必须使用 new 调用
  • 通过 this 添加成员

1.4.2 new 的执行过程

  1. 创建新对象
  2. 绑定 this
  3. 执行构造函数
  4. 返回对象

1.4.3 优化方法定义

将方法提取到外部避免重复创建:

function sayHi() { console.log("Hi"); } function Person(name) { this.name = name; this.sayHi = sayHi; }

1.5 原型模式

1.5.1 原型对象

function Person() {} Person.prototype.name = "张三"; Person.prototype.sayHi = function() { console.log("Hi"); };

特点:

  • 所有实例共享原型成员
  • 方法只需定义一次

1.5.2 原型链

属性查找顺序:

  1. 对象自身
  2. 原型对象
  3. Object.prototype
  4. null

1.6 垃圾回收

JavaScript 自动管理内存:

var obj = new Object(); // 解除引用 obj = null;

1.7 ES6 Class 语法

class Person { constructor(name) { this.name = name; } sayHi() { console.log(`Hi, ${this.name}`); } }

特点:

  • 语法更简洁
  • 本质仍是构造函数+原型
  • 方法自动添加到原型

JavaScript 对象创建方式详解

1.1 构造函数创建对象

使用new Object()构造函数创建对象是最基础的方式:

var obj = new Object(); obj.name = "张三"; obj.gender = "男"; obj.age = 18;

特点:

  • 使用new关键字调用构造函数
  • 语法较为冗长
  • 主要用于理解对象的基本概念

1.2 对象字面量创建对象

1.2.1 基本语法

对象字面量提供更简洁的创建方式:

var obj = { name: "猪八戒", age: 28, gender: "男", sayHi: function() { console.log("hi~"); } };

注意事项:

  • 采用键值对形式定义属性
  • 多个属性间用逗号分隔
  • 方法本质上是匿名函数

1.2.2 访问对象成员

// 点语法访问 console.log(obj.name); // 方括号访问 console.log(obj["age"]); // 调用方法 obj.sayHi();

1.2.3 遍历对象属性

使用for...in循环遍历对象:

for (var prop in obj) { console.log(`属性名:${prop}`); console.log(`属性值:${obj[prop]}`); }

1.2.4 this 关键字

this的指向规则:

  1. 函数调用:指向 window
  2. 方法调用:指向调用对象
  3. 构造函数调用:指向新对象
function showName() { console.log(this.name); } var obj1 = { name: "孙悟空", show: showName }; var obj2 = { name: "沙和尚", show: showName }; showName(); // 全局 obj1.show(); // 孙悟空 obj2.show(); // 沙和尚

1.3 工厂模式创建对象

解决批量创建对象问题:

function createPerson(name, age) { var obj = new Object(); obj.name = name; obj.age = age; return obj; }

缺点:

  • 对象类型无法区分
  • 构造函数均为 Object

1.4 构造函数模式

1.4.1 基本用法

function Person(name, age) { this.name = name; this.age = age; this.sayHi = function() { console.log("Hi"); }; } var p1 = new Person("张三", 20);

特点:

  • 首字母大写约定
  • 必须使用 new 调用
  • 通过 this 添加成员

1.4.2 new 的执行过程

  1. 创建新对象
  2. 绑定 this
  3. 执行构造函数
  4. 返回对象

1.4.3 优化方法定义

将方法提取到外部避免重复创建:

function sayHi() { console.log("Hi"); } function Person(name) { this.name = name; this.sayHi = sayHi; }

1.5 原型模式

1.5.1 原型对象

function Person() {} Person.prototype.name = "张三"; Person.prototype.sayHi = function() { console.log("Hi"); };

特点:

  • 所有实例共享原型成员
  • 方法只需定义一次

1.5.2 原型链

属性查找顺序:

  1. 对象自身
  2. 原型对象
  3. Object.prototype
  4. null

1.6 垃圾回收

JavaScript 自动管理内存:

var obj = new Object(); // 解除引用 obj = null;

1.7 ES6 Class 语法

class Person { constructor(name) { this.name = name; } sayHi() { console.log(`Hi, ${this.name}`); } }

特点:

  • 语法更简洁
  • 本质仍是构造函数+原型
  • 方法自动添加到原型
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 6:49:43

Vue3 系列教程(三)插值表达式与常用文本指令

前言 第2课已掌握Vue3应用的创建、挂载及单文件组件的基础结构,本课将聚焦Vue3中最基础的页面渲染方式——插值表达式与文本指令,理解不同文本渲染方式的使用规则与适用场景,掌握基础数据到页面的渲染逻辑,为后续动态数据展示打下…

作者头像 李华
网站建设 2026/5/3 5:56:57

宏智树AI数据分析:把原始数据变成论文硬核实证,小白也能玩转

作为深耕论文写作科普的博主,后台最扎心的求助莫过于:“问卷数据堆了几百条,却连SPSS的界面都搞不懂”“实验数据算出来了,不知道怎么解读成学术结论”“用Excel画的图被导师批‘不专业’,重新做又无从下手”。实证类论…

作者头像 李华
网站建设 2026/5/6 10:02:09

I2C(IIC)通信协议

一、IIC的概念 IC(Inter-Integrated Circuit),中文名为“集成电路总线”,是一种由 Philips 公司(现 NXP)在 1980 年代推出的串行通信总线协议。它广泛应用于嵌入式系统中,用于连接低速外设&…

作者头像 李华
网站建设 2026/4/30 21:46:12

基于深度学习与计算机视觉的高精度表格识别技术,精准识别复杂表格结构,自动输出结构化数据

在传统财务工作中,面对成百上千份格式各异的银行对账单、资产负债表和税务申报表,人工录入不仅效率低下,还极易引入错误。如何从非结构化或半结构化的纸质/电子文档中快速、准确地提取表格数据,成为企业财务数字化转型的关键瓶颈。…

作者头像 李华