new 命令的原理[通俗易懂]

new 命令的原理[通俗易懂]new 命令的原理

大家好,又见面了,我是你们的朋友全栈君。

前言

之前一直没完全弄清楚js原型链和继承,有时候是自己的理解,有时候靠死记;最近要回头看看js的基础,顺便记录一些内容。摘抄于阮一峰大神;如果想好好复习一下js基础内容,戳这里https://wangdoc.com/javascrip…

使用new命令时,它后面的函数依次执行下面的步骤。

1.创建一个空对象,作为将要返回的对象实例.
2.将这个空对象的原型,指向构造函数的prototype属性。
3.将这个空对象赋值给函数内部的this关键字。
4.开始执行构造函数内部的代码

也就是说,构造函数内部,this指的是一个新生成的空对象,所有针对this的操作,都会发生在这个空对象上。构造函数之所以叫“构造函数”,就是说这个函数的目的,就是操作一个空对象(即this对象),将其“构造”为需要的样子。

如果构造函数内部有return语句,而且return后面跟着一个对象,new命令会返回return语句指定的对象;否则,就会不管return语句,返回this对象。

var Vehicle = function () {
  this.price = 1000;
  return 1000;
};

(new Vehicle()) === 1000
// false

new命令简化的内部流程,可以用下面的代码表示。

function _new(/* 构造函数 */ constructor, /* 构造函数参数 */ params) {
  // 将 arguments 对象转为数组
  var args = [].slice.call(arguments);
  // 取出构造函数
  var constructor = args.shift();
  // 创建一个空对象,继承构造函数的 prototype 属性
  var context = Object.create(constructor.prototype);
  // 执行构造函数
  var result = constructor.apply(context, args);
  // 如果返回结果是对象,就直接返回,否则返回 context 对象
  return (typeof result === 'object' && result != null) ? result : context;
}

// 实例
var actor = _new(Person, '张三', 28);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107179.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月20日 下午11:20
下一篇 2022年4月20日 下午11:40


相关推荐

  • ORA-12705: Cannot access NLS data files or invalid environment specified

    ORA-12705: Cannot access NLS data files or invalid environment specified

    2022年1月20日
    59
  • 非主流文字生成_非主流文字转换器

    非主流文字生成_非主流文字转换器这是米奥的第01篇笔记作者|米奥来源|米奥笔记ID|miaobiji01为什么要重视排版回想一下,你一般都是在什么场景下来阅读公众号的推文?可能是窝在被窝时、坐公交地铁时、排队吃饭时、工作学习开小差时,甚至是厕所蹲坑时……在这么“将就”的环境下,我们很难高度集中我们的注意力来阅读一篇文章。所以,高颜值的排版要让用户看起来舒服、轻松,而不是花枝招展;另外,在这样的…

    2026年4月13日
    7
  • cts测试[通俗易懂]

    也在这里mark下我所学的知识与大家分享下,大家多多指正哈。。。cts主要是要从google官网下载相关文件。之后那连接手机。adbdevices:如果显示出手机的序列号,那么就可以进行cts的测试。如果没有可以打:sudoadbkill-server

    2022年4月10日
    94
  • 用C++程序理解汉字的机内码表示

    用C++程序理解汉字的机内码表示汉字的编码是很多初学者不容易搞不明白的事情 最早的汉字字符集是 GB2312 80 收入汉字 6763 个 符号 715 个 总计 7478 个字符 大陆普遍使用的简体字字符集 本文借助于一个能输出这些字符的简单的 C 程序 体验汉字字符的编码 先简介一下 GB2312 80 的概况 1 区位码 每个汉字及符号都有一个区位码 即每个汉字有一个区号 两位十进制 和一个位号 两位十进制 一共分了 94 个区 每

    2025年8月24日
    97
  • 使用CreateThread函数创建线程

    使用CreateThread函数创建线程线程是进程中的一个实体 是被系统独立调度和分派的基本单位 一个进程可以拥有多个线程 但是一个线程必须有一个进程 线程自己不拥有系统资源 只有运行所必须的一些数据结构 但它可以与同属于一个进程的其它线程共享进程所拥有的全部资源 同一个进程中的多个线程可以并发执行 在 C C 中可以通过 CreateThread 函数在进程中创建线程 函数的具体格式如下 HANDLECreate

    2026年3月18日
    2
  • 在腾讯云Spot实例部署OpenClaw的完整教程与配置指南

    在腾讯云Spot实例部署OpenClaw的完整教程与配置指南

    2026年3月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号