zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    想用Nginx代理一切?行!
    [SuProxy]Ngnix+Lua 实现SSH2,LDAP,ORACLE,SQLSERVER等TCP/IP协议分析,劫持,代理,会话及负载
    hive分区表详细介绍
    hive 中自定义UDF函数和自定义UDTF函数
    yarn工作原理
    HDFS小文件问题
    HDFS读写流程
    利用 canvas 实现签名效果
    idea里面自带的翻译插件
    idea的set,get插件
  • 原文地址:https://www.cnblogs.com/runrunrun/p/11487131.html
Copyright © 2011-2022 走看看