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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sublime text3的激活码【中文破解版】

    (sublime text3的激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月2日
    96
  • Set集合详解

    Set集合详解定义:一个set集合不能包含重复的元素,set实现Collection并增加了hashCode和equals方法。set不允许存储值相同的元素,原因为在取值的时候set依靠的是元素本身取值。由于set提供了hashCode和Equals方法,所以set支持比较。set主要实现HashSet,TreeSet,LinkedHashSet(后面会分别以不同的文章介绍着三种实现)set允许存储一个null…

    2022年6月3日
    141
  • 操作系统实验三 进程调度[通俗易懂]

    实验三进程调度一、实验目的1、理解有关进程控制块、进程队列的概念。2、掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。二、实验内容与基本要求1、设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。2、建立进程就绪队列。3、编制两种进程调度算法:优先权调度算法和时间片轮转调度算法。三、实验报告要求1、优先权调度算法和

    2022年4月18日
    93
  • 使用vue.js安装node环境npm出错npm ERR! network request to https://registry.npmjs.org/nrm failed, reason: conn[通俗易懂]

    使用vue.js安装node环境npm出错npm ERR! network request to https://registry.npmjs.org/nrm failed, reason: conn[通俗易懂]报错信息:npmERR!codeETIMEDOUTnpmERR!errnoETIMEDOUTnpmERR!networkrequesttohttps://registry.npmjs.org/nrmfailed,reason:connectETIMEDOUT104.16.20.35:443npmERR!networkThisisaproblem…

    2022年10月29日
    0
  • U盘安装window系统[通俗易懂]

    U盘安装window系统[通俗易懂]U盘安装window系统:1.制作系统启动U盘,推荐使用老毛桃。2.电脑上插入U盘,启动系统,选择U盘启动。3.进入老毛桃选择界面,选择生成PE系统。推荐win8,之前在一个戴尔电脑上使用win

    2022年8月1日
    5
  • CColor类封装[建议收藏]

    CColor类封装2.Color.cpp

    2021年12月18日
    47

发表回复

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

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