JavaScript 对象与原型

目录

[JavaScript 对象创建方式详解](#JavaScript 对象创建方式详解)

[1.1 构造函数创建对象](#1.1 构造函数创建对象)

[1.2 对象字面量创建对象](#1.2 对象字面量创建对象)

[1.2.1 基本语法](#1.2.1 基本语法)

[1.2.2 访问对象成员](#1.2.2 访问对象成员)

[1.2.3 遍历对象属性](#1.2.3 遍历对象属性)

[1.2.4 this 关键字](#1.2.4 this 关键字)

[1.3 工厂模式创建对象](#1.3 工厂模式创建对象)

[1.4 构造函数模式](#1.4 构造函数模式)

[1.4.1 基本用法](#1.4.1 基本用法)

[1.4.2 new 的执行过程](#1.4.2 new 的执行过程)

[1.4.3 优化方法定义](#1.4.3 优化方法定义)

[1.5 原型模式](#1.5 原型模式)

[1.5.1 原型对象](#1.5.1 原型对象)

[1.5.2 原型链](#1.5.2 原型链)

[1.6 垃圾回收](#1.6 垃圾回收)

[1.7 ES6 Class 语法](#1.7 ES6 Class 语法)

[JavaScript 对象创建方式详解](#JavaScript 对象创建方式详解)

[1.1 构造函数创建对象](#1.1 构造函数创建对象)

[1.2 对象字面量创建对象](#1.2 对象字面量创建对象)

[1.2.1 基本语法](#1.2.1 基本语法)

[1.2.2 访问对象成员](#1.2.2 访问对象成员)

[1.2.3 遍历对象属性](#1.2.3 遍历对象属性)

[1.2.4 this 关键字](#1.2.4 this 关键字)

[1.3 工厂模式创建对象](#1.3 工厂模式创建对象)

[1.4 构造函数模式](#1.4 构造函数模式)

[1.4.1 基本用法](#1.4.1 基本用法)

[1.4.2 new 的执行过程](#1.4.2 new 的执行过程)

[1.4.3 优化方法定义](#1.4.3 优化方法定义)

[1.5 原型模式](#1.5 原型模式)

[1.5.1 原型对象](#1.5.1 原型对象)

[1.5.2 原型链](#1.5.2 原型链)

[1.6 垃圾回收](#1.6 垃圾回收)

[1.7 ES6 Class 语法](#1.7 ES6 Class 语法)


JavaScript 对象创建方式详解

1.1 构造函数创建对象

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

js 复制代码
var obj = new Object();
obj.name = "张三";
obj.gender = "男";
obj.age = 18;

特点:

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

1.2 对象字面量创建对象

1.2.1 基本语法

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

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

注意事项:

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

1.2.2 访问对象成员

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

1.2.3 遍历对象属性

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

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

1.2.4 this 关键字

this 的指向规则:

  1. 函数调用:指向 window
  2. 方法调用:指向调用对象
  3. 构造函数调用:指向新对象
js 复制代码
function showName() {
  console.log(this.name);
}

var obj1 = { name: "孙悟空", show: showName };
var obj2 = { name: "沙和尚", show: showName };

showName();    // 全局
obj1.show();   // 孙悟空
obj2.show();   // 沙和尚

1.3 工厂模式创建对象

解决批量创建对象问题:

js 复制代码
function createPerson(name, age) {
  var obj = new Object();
  obj.name = name;
  obj.age = age;
  return obj;
}
  var obj2=createPerson("猪八戒",28,"男");
  var obj3=createPerson("沙和尚",38,"男");
  var obj4=createPerson("白骨精",18,"女");

1.4 构造函数模式

1.4.1 基本用法

js 复制代码
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 优化方法定义

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

js 复制代码
function sayHi() {
  console.log("Hi");
}

function Person(name) {
  this.name = name;
  this.sayHi = sayHi;
}

1.5 原型模式

1.5.1 原型对象

js 复制代码
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 自动管理内存:

js 复制代码
var obj = new Object();
// 解除引用
obj = null;

1.7 ES6 Class 语法

js 复制代码
class Person {
  constructor(name) {
    this.name = name;
  }
  
  sayHi() {
    console.log(`Hi, ${this.name}`);
  }
}

特点:

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

JavaScript 对象创建方式详解

1.1 构造函数创建对象

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

js 复制代码
var obj = new Object();
obj.name = "张三";
obj.gender = "男";
obj.age = 18;

特点:

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

1.2 对象字面量创建对象

1.2.1 基本语法

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

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

注意事项:

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

1.2.2 访问对象成员

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

1.2.3 遍历对象属性

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

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

1.2.4 this 关键字

this 的指向规则:

  1. 函数调用:指向 window
  2. 方法调用:指向调用对象
  3. 构造函数调用:指向新对象
js 复制代码
function showName() {
  console.log(this.name);
}

var obj1 = { name: "孙悟空", show: showName };
var obj2 = { name: "沙和尚", show: showName };

showName();    // 全局
obj1.show();   // 孙悟空
obj2.show();   // 沙和尚

1.3 工厂模式创建对象

解决批量创建对象问题:

js 复制代码
function createPerson(name, age) {
  var obj = new Object();
  obj.name = name;
  obj.age = age;
  return obj;
}

缺点:

使用工厂方法创建的对象,使用的构造函数都是Object

所以创建的对象都是Object这个类型

就导致我们无法区分多种不同类型的对象

1.4 构造函数模式

1.4.1 基本用法

js 复制代码
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 优化方法定义

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

js 复制代码
function sayHi() {
  console.log("Hi");
}

function Person(name) {
  this.name = name;
  this.sayHi = sayHi;
}

1.5 原型模式

1.5.1 原型对象

js 复制代码
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 自动管理内存:

js 复制代码
var obj = new Object();
// 解除引用
obj = null;

1.7 ES6 Class 语法

js 复制代码
class Person {
  constructor(name) {
    this.name = name;
  }
  
  sayHi() {
    console.log(`Hi, ${this.name}`);
  }
}

特点:

  • 语法更简洁
  • 本质仍是构造函数+原型
  • 方法自动添加到原型
相关推荐
0x532 小时前
JAVA|智能无人机平台(二)
java·开发语言·无人机
前端 贾公子2 小时前
Git优雅使用:git tag操作
javascript·github
嵌入小生0072 小时前
基于Linux系统下的C语言程序错误及常见内存问题调试方法教程(嵌入式-Linux-C语言)
linux·c语言·开发语言·嵌入式·小白·内存管理调试·程序错误调试
小温冲冲2 小时前
QPixmap 详解:Qt 中的高效图像处理类
开发语言·图像处理·qt
面汤放盐2 小时前
企业权限--系统性方案探究
java·开发语言
悟能不能悟3 小时前
java Date转换为string
java·开发语言
菜宾3 小时前
java-redis面试题
java·开发语言·redis
程序员_大白3 小时前
区块链部署与运维,零基础入门到精通,收藏这篇就够了
运维·c语言·开发语言·区块链
qq_229058013 小时前
python-Dgango项目收集静态文件、构建前端、安装依赖
开发语言·python