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


相关推荐

  • 查询linux版本信息的命令_查系统版本命令

    查询linux版本信息的命令_查系统版本命令通常使用命令uname在Linux下面察看版本信息-a或–all:显示全部的信息;-m或–machine:显示电脑类型;-n或-nodename:显示在网络上的主机名称;-r或–release:显示操作系统的发行编号;-s或–sysname:显示操作系统名称;-v:显示操作系统的版本;-p或–processor:输出处理器类型或”unknown”;-i或-

    2022年8月21日
    7
  • MySQL修改root密码的4种方法

    MySQL修改root密码的4种方法方法1:用SETPASSWORD命令首先登录MySQL。格式:mysql>setpasswordfor用户名@localhost=password(‘新密码’);例子:mysql>setpasswordforroot@localhost=password(‘123’);方法2:用mysqladmin格式:mysqladmin-u用户名-p旧密

    2022年6月29日
    52
  • idea汉化教程[通俗易懂]

    idea汉化教程[通俗易懂]1.同样的,第一步,打开软件2.进入软件后依次点击file→settings3.接着点击plugins4.然后点击Marketplace(在线搜索插件)5.在搜索框输入chinese(看到这个名字,知道是啥了吧),找到Chinese(simplifed)Language这个插件,然后点击安装6.等待安装完成后点击RestartIDE7.点击Restart8.然后软件会重启,等待重启后,进入软件,然后你会发现,和你想象中的一样了…

    2022年4月27日
    81
  • 程序员写代码都用什么样的笔记本?

    程序员写代码都用什么样的笔记本?程序员一般喜欢用thinkpad或者Mac,因为价位等方面的因素,还是用thinkpad多点,从事不同研发方向需要的计算机的配置也不太相同,现在开发软件要求的机器配置也和十几年不太一样,那个时候嵌入式刚好是红利期,很多的培训机构呼呼涉足这个领域,那个时期AMD的cpu还能和intel抗衡一下,不像现在有这么大的差异,记得第一家公司属于创业性质的公司,公司配置的电脑是神州牌子的,在上面开发软件,需要…

    2022年5月29日
    52
  • SSM框架下一个简单的模糊查询(超级详细)

    SSM框架下一个简单的模糊查询(超级详细)引言:模糊查询作为后台常用的一种查询方式,我们可以根据相应的关键字对其检索,从而获得所需要的记录,本次模糊查询我们通过名字的任何一个字段进行匹配查询。另外声明,源码就是以下的部分,直接复制就可以使用了。此外,想要模糊查询,最好学会分页查询,分页查询我用了两种方法,一种是利用的pageHelper,另一种没用到插件.需要源码的,或者demo,在我的资源下载,需要远程帮忙的可以加我QQ…

    2022年5月30日
    77
  • CyclicBarrier和CountDownLatch区别

    CyclicBarrier和CountDownLatch区别这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧CyclicBarrier和CountDownLatch都位于java.util.concurrent这个包下CountDownLatchCyclicBarrier

    2022年7月13日
    17

发表回复

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

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