1. function Person(name, age) {
  2. this.name = name;
  3. this.age = age
  4. }
  5. var person = new Person('小明', 18);
  6. console.log(person.name); //小明
  7. console.log(person.age); //18

执行new命令会经过以下几个步骤

  1. 创建一个空对象,这个对象将会是new Person()返回的对象实例;
  2. 将这个空对象的原型指向构造函数prototype属性;
  3. 构造函数this指向空对象,并运行构造函数;
  4. 判断构造函数返回的是不是对象,是的话返回默认对象,不是的话返回之前创建的空对象,没有返回值默认返回空对象

用代码解释一下


  1. function Person(name, age) {
  2. this.name = name;
  3. this.age = age
  4. //return '小明' //如果返回的不是Object类型,将忽略这个return 返回之前创建的空对象
  5. /* return { //如果返回的是Object类型,直接返回这个对象
  6. 'name' : '小花',
  7. 'age' : 22
  8. } */
  9. }
  10. function _new(person, ...rest){
  11. var obj = {}; // 创建一个空对象,这个对象将会是返回的对象实例
  12. obj.__prototype__ = person.prototype; // 将这个空对象的原型指向person的prototype属性;
  13. //上述两步可以合为一步 : var obj = Object.create(person.prototype)
  14. var res = person.apply(obj, rest); // 将person的this指向空对象,并运行person函数,apply命令绑定this后就会运行person
  15. return (typeof res === 'object' && res != null) ? res: obj;
  16. // 判断res返回的是不是对象,是的话返res,不是的话返回之前创建的obj,没有返回值默认返回obj
  17. }
  18. var xiaoming = _new(Person, '小明', 15)
  19. console.log(xiaoming .name); //小明
  20. console.log(xiaoming .age); //15

本篇如能对您有所帮助,实在是感到荣幸。如有不合理之处也请大家多多指点。

原文地址:https://segmentfault.com/a/1190000016718620

new命令的原理的更多相关文章

  1. Linux下的service命令和chkconfig命令的原理

    CentOS下的service命令和chkconfig命令的原理 1.service命令的原理 service命令用来对服务进行启动和关闭,比如service mysqld start可以启动mysq ...

  2. atitit.基于  Commons CLI 的命令行原理与 开发

    atitit.基于  Commons CLI 的命令行原理与 开发 1. 命令行支持的格式有以下几种: 1 2. json化,map化的命令行参数内部表示 1 3. Ati cli 2 4. CLI库 ...

  3. win8/10 bcdboot引导修复命令的原理和使用方法

    win8/10 bcdboot引导修复命令的原理和使用方法 [迅维网原创文章禁止转载] (本文所述已用UEFI+GPT.BIOS+MBR,WIN10 64位企业版和专业版测试过) 在win8/10系统 ...

  4. “ping”命令的原理就是向对方主机发送UDP数据包,HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”

    Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP  FTP  SMTP  Web 传输层:  在两个应用程序之间提供了逻辑而不是物理的通信(TCP  UDP) T ...

  5. sqlmap之--os-shell命令执行原理

    最近也是在看sqlmap,感觉--os-shell这个命令确实很厉害,但我并不知道它的原理,所以来研究一下 环境 环境就是我本地搭的一个有sql注入漏洞的一个小demo 演示 这是我们的demo环境 ...

  6. Sqoop详细介绍包括:sqoop命令,原理,流程

    一简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS ...

  7. ping命令知识 Ping命令工作原理详解

    在网络应用中,ping网速与IP地址等都是非常常用的命令,但大家知道ping命令的工作原理吗?要知道这其中的奥秘,我们有必要来看看Ping命令的工作过程到底是怎么样的.下面介绍下ping命令的详细知识 ...

  8. 为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

    写在前面 最近发现很多小伙伴对于工作中的一些基本工具的使用还不是很了解,比如:Git这个分布式的代码管理仓库,很多小伙伴就不是很了解,或者说不是很熟悉.甚至有些小伙伴都没听说过Git,就只会用个SVN ...

  9. hdfs shell 命令以及原理

    shell 操作 dfs 上传[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -put /opt/MegaRAID/MegaCli/MegaCli64 ...

  10. Command Pattern -- 命令模式原理及实现(C++)

    主要参考<大话设计模式>和<设计模式:可复用面向对象软件的基础>两本书.本文介绍命令模式的实现. What it is:Encapsulate a request as an ...

随机推荐

  1. 【Tip】JavaScript

    『JavaScript』 『引用网络资源』 JQuery <script src="http://code.jquery.com/jquery-latest.js">& ...

  2. 【UVA - 540】Team Queue (map,队列)

    Team Queue Descriptions: Queues and Priority Queues are data structures which are known to most comp ...

  3. js同过url下载文件,调用另存为弹框

    实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文 ...

  4. Hdu 1043 Eight (八数码问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目描述: 3*3的格子,填有1到8,8个数字,还有一个x,x可以上下左右移动,问最终能否移动 ...

  5. Codeforces Round #410 (Div. 2) C

    Description Mike has a sequence A = [a1, a2, ..., an] of length n. He considers the sequence B = [b1 ...

  6. Codeforces Round #395 (Div. 2) A

    Description Comrade Dujikov is busy choosing artists for Timofey's birthday and is recieving calls f ...

  7. [APIO2012]派遣 洛谷P1552 bzoj2809 codevs1763

    http://www.codevs.cn/problem/1763/ https://www.lydsy.com/JudgeOnline/problem.php?id=2809 https://www ...

  8. Could not open logfile" occurred when run "datapatch -verbose"

    CAUSE Due to Bug 25459405 - DATAPATCH FAILS WITH SP2-0768 IF NLS_LANGUAGE IS NOT SET TO AMERICANwhic ...

  9. C++ <string> 里面的size_type

    string::size_type string的 str.size() 返回值是一个unsigned,实际上返回的是size_type类型的值. string类和其他的大多数标准库类型都定义了几套配 ...

  10. vmware桥接模式下主机有多个网卡导致虚拟机网络不通

    桥接模式下,vmware会绑定一个物理网卡,因此有多个物理网卡时就要注意当前绑定的物理网卡.打开如下vmware菜单 可以看到VMnet0是桥接模式用的,然后他可以选择绑定一个物理网卡,注意要正确选择 ...