zoukankan      html  css  js  c++  java
  • JavaScript (new)创建一个对象的过程

    在JavaScript的世界中,对象Object的操作是比较灵活的,可以通过创建一个对象,来进行继承,拓展,而且对象的属性是极其容易拓展的。

    所以创建一个对象实例流程可以是这样子的:

        function Person(name , age){
             this.name = name;
             this.age = age;
             console.log(this); // Person {name: "neo", age: "23"}
             //return this; 默认隐藏
         }
         var p1 = new Person('neo','10');
         console.log(p1.name);
    
        等同于:
         function Person(name , age){
             this.name = name;
             this.age = age;
             console.log(this); //window
             return this;
         }
         var p1 = new Object(); //var p1 = {}
         p1 = Person('neo','23');
         console.log(p1.name);
     

    new 关键字做了什么

    在 JavaScript 中,使用 new 关键字后,意味着做了如下四件事情:

    创建一个新的对象,这个对象的类型是 object;

    设置这个新的对象的内部、可访问性和[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;

    执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性; 返回新创建的对象(除非构造方法中返回的是‘无原型’)。

    在创建新对象成功之后,如果调用一个新对象没有的属性的时候,JavaScript 会延原型链向止逐层查找对应的内容。这类似于传统的‘类继承’。

    注意:在第二点中所说的有关[[prototype]]属性,只有在一个对象被创建的时候起作用,比如使用 new 关键字、使用 Object.create 、基于字面意义的(函数默认为 Function.prototype ,数字默认为 Number.prototype 等)。它只能被Object.getPrototypeOf(someObject) 所读取。没有其他任何方式来设置或读取这个值。


    MDN传送门

    创建一个用户自定义的对象需要两步:

    通过编写函数来定义对象类型。
    通过new来创建对象实例。

    创建一个对象类型,需要创建一个指定其名称和属性的函数;对象的属性可以指向其他对象,看下面的例子:

    当代码 new Person(…) 执行时,会发生以下事情:

    一个继承自 Person.prototype 的新对象被创建。

    使用指定的参数调用构造函数 Person,并将 this 绑定到新创建的对象。new Person等同于 new Person(),也就是没有指定参数列表,Person不带任何参数调用的情况。

    由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。(一般情况下,构造函数不返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤)

     
  • 相关阅读:
    python_Memcached
    python_day10_IO多路复用
    java_list,set,map集合
    python3.0_day9_scoket基础之篇
    redis.conf配置文件详解
    Java_数组
    面向接口编程初识(转)
    SSH三种框架及表示层、业务层和持久层的理解(转)
    解决win10磁盘占用过大的问题(亲测有效)
    ORA-12541:TNS:无监听程序
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/12285249.html
Copyright © 2011-2022 走看看