前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JavaScript】对象 ④ ( 构造函数与对象的联系 | new 操作符执行过程分析 )

【JavaScript】对象 ④ ( 构造函数与对象的联系 | new 操作符执行过程分析 )

作者头像
韩曙亮
发布2024-04-28 08:02:39
810
发布2024-04-28 08:02:39
举报

一、构造函数与对象的联系

在 JavaScript 中 , 构造函数 与 对象 之间 是 描述 与 实例 之间的关系 ;

  • 构造函数 是 用来创建特定类型对象的函数 ;
  • 对象 是 根据 构造函数 实例化出来的具体实例 ;

构造函数 抽象了 对象的公共部分 , 将 属性 和 方法 封装到了 构造函数中 , 可以理解为 面向对象 中的 类 ;

对象 指的是 某一个特定的实例化值 ;

二、new 操作符执行过程分析

1、使用 new 构造函数() 创建对象过程

在上一篇博客 【JavaScript】对象 ③ ( 使用 new Object 创建对象 | 使用 构造函数 创建对象 | 构造函数语法 | 使用 字面量 和 new Object 创建对象的方法弊端 ) 中 , 讲解了 构造函数的使用流程 ,

首先 , 定义构造函数 ;

代码语言:javascript
复制
// 1. 定义构造函数  
function Person(uname, age) {  
    // 2. 在构造函数内部定义属性和方法  
    this.uname = uname;  
    this.age = age;  
      
    this.hello = function() {  
        console.log( this.uname + " is " + this.age + " years old");
    };  
}  

然后 , 使用 new 操作符 调用构造函数 , 创建对象 ;

代码语言:javascript
复制
// 3. 使用 new 操作符调用构造函数,创建对象
var person = new Person('Tom', 18);

2、new 操作符执行过程

new 操作符 的 主要作用就是 创建一个新的对象实例 , 这个 对象实例 会继承构造函数的 prototype 对象 , 并 执行 构造函数 中的代码 , 来初始化新对象的属性和方法 , 下面详细分析 new 操作符 的执行过程 ;

new 操作符 创建对象 的执行过程 如下 :

  • 首先 , 创建空对象 , 使用 new 操作符 调用 构造函数 , 可以 在 内存空间 中 , 创建一个 空对象 ;
  • 然后 , this 指针指向对象 , 将 构造函数 中的 this 指针指向该 空对象 ;
    • 新创建的 空对象 的 __proto__ 会被链接到 构造函数 的 prototype 对象 , 该 空对象 就可以 访问 在 构造函数 中 定义的 属性和方法 ;
  • 再后 , 设置属性和方法 , 执行 构造函数 中的代码 , 为 空对象 设置 属性 和 方法 ;
    • this 关键字 在 构造函数 内部被设置为新创建的对象 , 之后 执行构造函数的代码 , 给新对象添加属性和方法 ;
  • 最后 , 返回创建的对象 , 将 内存空间 中 创建的对象返回 , 一般是赋值给 var / let 关键字声明的变量 ;
    • new 关键字 可以 将 创建的对象直接返回 , 因此 构造函数 中 不需要 return 语句 ;
      • 如果构造函数 没有 显式地 返回一个对象 , new 操作符 会自动返回新创建的对象 ;
      • 如果构造函数 确实 显式地 返回了一个 返回值 , 那么这个返回值会被 new 操作符 返回 ;
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、构造函数与对象的联系
  • 二、new 操作符执行过程分析
    • 1、使用 new 构造函数() 创建对象过程
      • 2、new 操作符执行过程
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com