• JavaScript new的运行过程


    参考 MDN网站的运算符

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:

    1)创建一个空的简单JavaScript对象(即{});
    2)链接该对象(即设置该对象的构造函数)到另一个对象 ;
    3)将步骤1新创建的对象作为this的上下文 ;
    4)如果该函数没有返回对象,则返回this。

    复现代码如下:

     1 <script type="text/javascript">
     2     function Person(name,age){
     3         this.name=name;
     4         this.age=age;
     5         //return this; 6     }
     7     Person.prototype.say=function(sth){
     8         console.log('I Say:'+sth);
     9     };
    10 
    11     function _new(){
    12         //创建一个简单的空对象
    13         var obj={};
    14         //获取构造函数
    15         var _Constructor=arguments[0];
    16         //链接到原型
    17         obj=Object.create(_Constructor.prototype);//obj.__proto__=_Constructor.prototype;__proto__不推荐使用 见https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/proto
    18         
    19         //获取构造函数的参数列表的值
    20         var _args=Array.prototype.slice.call(arguments,1);
    21         //将构造函数绑定到this值(result值)
    22         var result = _Constructor.apply(obj,_args);
    23         //判断构造函数是否return非构造函数this的值,若是非对象则忽略返回构造函数this值,若是对象则返回构造函数return的对象
    24         return typeof result === "object" ? result : obj;//如果返回值是一个对象就返回该对象,否则返回构造函数的一个实例对象
    25     };
    26     var newPerson=new Person('orgin',1);
    27     var _newPerson=_new(Person,'my',2);
    28     
    29     console.log(newPerson);
    30     console.log(_newPerson);
    31 
    32     var newPerson2=new Person;
    33     var _newPerson2=_new(Person);
    34     console.log(newPerson2);
    35     console.log(_newPerson2);
    36 </script>
  • 相关阅读:
    关于我的介绍
    关于这周的作业
    关于这周的学习
    每周学习
    关于这周程序设计
    关于这周的总结
    关于这周的学习
    随机抽签程序报告
    Mysql的主从复制原理及部署
    项目架构脚本
  • 原文地址:https://www.cnblogs.com/runrunrun/p/11487131.html
Copyright © 2020-2023  润新知