精华内容
下载资源
问答
  • Constructor

    千次阅读 2019-03-20 09:15:11
    java.lang.reflect.Constructor 一、Constructor类是什么  Constructor是一个类,位于java.lang.reflect包下。  在Java反射中 Constructor类描述的是 类的构造方法信息,通俗来讲 有一个类如下: 1 package ...

    java.lang.reflect.Constructor

    一、Constructor类是什么
      Constructor是一个类,位于java.lang.reflect包下。
      在Java反射中 Constructor类描述的是 类的构造方法信息,通俗来讲 有一个类如下:

     

     1 package com.testReflect;
     2 public class ConstructorDemo {
     3     private int num;
     4     private String str;
     5     
     6     public ConstructorDemo(){
     7         num = 2;
     8         str = "xixi";
     9     }
    10     
    11     public ConstructorDemo(int num,String str){
    12         this.num = num;
    13         this.str = str;
    14     }
    15 
    16     @Override
    17     public String toString() {
    18         return "ConstructorDemo [num=" + num + ", str=" + str + "]";
    19     }
    20 }

     

      在Java反射中ConstructorDemo类中的构造方法ConstructorDemo()、ConstructorDemo(int num,String str)都是Constructor类的实例,这个Constructor类的实例描述了构造方法的全部信息。(包括:方法修饰符、方法名称、参数列表 等等)

    二、如何获取Constructor类对象
      一共有4种方法,全部都在Class类中:
        - getConstructors():获取类中的公共方法
        - getConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型
        - getDeclaredConstructors(): 获取类中所有的构造方法(public、protected、default、private)
        - getDeclaredConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型

    三、Constructor类中常用的方法
      对于构造方法,我们就是用来创建类的实例的,但是在Java反射中需要注意的是:默认构造函数和带参数的构造方法创建实例的区别。

     

     1 package com.testReflect;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.Modifier;
     5 
     6 public class ConstructorTest {
     7     public static void main(String[] args) throws Exception {
     8         //使用反射第一步:获取操作类ConstructorDemo所对应的Class对象
     9         Class<?> cls = Class.forName("com.testReflect.ConstructorDemo");
    10         
    11         //获取默认的构造函数
    12         Constructor constructor1 = cls.getConstructor(new Class[]{});
    13         //获取构造函数信息
    14         System.out.println("修饰符: "+Modifier.toString(constructor1.getModifiers()));
    15         System.out.println("构造函数名: "+constructor1.getName());
    16         System.out.println("参数列表: "+constructor1.getParameterTypes());
    17         //通过默认的构造函数创建ConstructorDemo类的实例
    18         Object obj = constructor1.newInstance();
    19         System.out.println("调用默认构造函数生成实例:"+obj.toString());
    20         
    21         System.out.println("===============================================");
    22         
    23         //获取带参数的构造函数
    24         Constructor constructor2 = cls.getConstructor(new Class[]{int.class,String.class});
    25         System.out.println("修饰符: "+Modifier.toString(constructor2.getModifiers()));
    26         System.out.println("构造函数名: "+constructor2.getName());
    27         System.out.println("参数列表: "+constructor2.getParameterTypes());
    28         //获取构造函数信息
    29         //通过带参数的构造函数创建ConstructorDemo类的实例
    30         Object obj2 = constructor2.newInstance(new Object[]{33,"haha"});
    31         System.out.println("调用带参数构造函数生成实例:"+obj2.toString());
    32     }
    33 }

     

    new Class[]{}就是相当于把他们筹在一起其实可以分开写。 

    展开全文
  • constructor

    2018-11-06 14:44:00
    object.constructor Returns a reference to the Object constructor function that created the instance object. Note that the value of this property is a reference to the function itself, not a string co...

    object.constructor

    Returns a reference to the Object constructor function that created the instance object. Note that the value of this property is a reference to the function itself, not a string containing the function's name. The value is only read-only for primitive values such as 1, true and "test".

    Description

    All objects (with the exception of objects created with Object.create(null)) will have a constructor property. Objects created without the explicit use of a constructor function (i.e. the object and array literals) will have a constructor property that points to the Fundamental Object constructor type for that object.

    var o = {};
    o.constructor === Object; // true
    
    var o = new Object;
    o.constructor === Object; // true
    
    var a = [];
    a.constructor === Array; // true
    
    var a = new Array;
    a.constructor === Array; // true
    
    var n = new Number(3);
    n.constructor === Number; // true

    转载于:https://www.cnblogs.com/lal520/p/9915198.html

    展开全文
  •   作为一名前端工程师,必须搞懂JS中的prototype、__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们。这里说明一点,__...

    提示:不要排斥,静下心来,认真读完,你就搞懂了!(可以先看一下最后的总结部分再回过头来完整看完)

    1. 前言

      作为一名前端工程师,必须搞懂JS中的prototype__proto__constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们。这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _,读作“dunder proto”,“double underscore proto”的缩写),实际上,该属性在ES标准定义中的名字应该是[[Prototype]],具体实现是由浏览器代理自己实现,谷歌浏览器的实现就是将[[Prototype]]命名为__proto__,大家清楚这个标准定义与具体实现的区别即可(名字有所差异,功能是一样的),可以通过该方式检测引擎是否支持这个属性:Object.getPrototypeOf({__proto__: null}) === null。本文基于谷歌浏览器(版本 72.0.3626.121)的实验结果所得。
       现在正式开始! 让我们从如下一个简单的例子展开讨论,并配以相关的图帮助理解:

    function Foo() {...};
    let f1 = new Foo();
    

    以上代码表示创建一个构造函数Foo(),并用new关键字实例化该构造函数得到一个实例化对象f1。这里稍微补充一下new操作符将函数作为构造器进行调用时的过程:函数被调用,然后新创建一个对象,并且成了函数的上下文(也就是此时函数内部的this是指向该新创建的对象,这意味着我们可以在构造器函数内部通过this参数初始化值),最后返回该新对象的引用,详细请看:详解JavaScript中的new操作符。虽然是简简单单的两行代码,然而它们背后的关系却是错综复杂的,如下图所示:
    整体的联系看到这图别怕,让我们一步步剖析,彻底搞懂它们!
      图的说明:右下角为图例,红色箭头表示__proto__属性指向、绿色箭头表示prototype属性的指向、棕色实线箭头表示本身具有的constructor属性的指向,棕色虚线箭头表示继承而来的constructor属性的指向;蓝色方块表示对象,浅绿色方块表示函数(这里为了更好看清,Foo()仅代表是函数,并不是指执行函数Foo后得到的结果,图中的其他函数同理)。图的中间部分即为它们之间的联系,图的最左边即为例子代码。

    2. _ _ proto _ _ 属性

      首先,我们需要牢记两点:①__proto__constructor属性是对象所独有的;② prototype属性是函数所独有的。但是由于JS中函数也是一种对象,所以函数也拥有__proto__constructor属性,这点是致使我们产生困惑的很大原因之一。上图有点复杂,我们把它按照属性分别拆开,然后进行分析:
    __proto__
      第一,这里我们仅留下 __proto__ 属性,它是对象所独有的,可以看到__proto__属性都是由一个对象指向一个对象,即指向它们的原型对象(也可以理解为父对象),那么这个属性的作用是什么呢?它的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存在这个属性,则继续往父对象的__proto__属性所指向的那个对象(可以理解为爷爷对象)里找,如果还没找到,则继续往上找…直到原型链顶端null(可以理解为原始人。。。),再往上找就相当于在null上取值,会报错(可以理解为,再往上就已经不是“人”的范畴了,找不到了,到此结束,null为原型链的终点),由以上这种通过__proto__属性来连接对象直到null的一条链即为我们所谓的原型链
      其实我们平时调用的字符串方法、数组方法、对象方法、函数方法等都是靠__proto__继承而来的。

    3. prototype属性

      第二,接下来我们看 prototype 属性:
    prototype属性  prototype属性,别忘了一点,就是我们前面提到要牢记的两点中的第二点,它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象,也就是这个函数(其实所有函数都可以作为构造函数)所创建的实例的原型对象,由此可知:f1.__proto__ === Foo.prototype,它们两个完全一样。那prototype属性的作用又是什么呢?它的作用就是包含可以由特定类型的所有实例共享的属性和方法,也就是让该函数所实例化的对象们都可以找到公用的属性和方法。任何函数在创建的时候,其实会默认同时创建该函数的prototype对象。

    4. constructor属性

      最后,我们来看一下 constructor 属性:
    constructor属性  constructor属性也是对象才拥有的,它是从一个对象指向一个函数,含义就是指向该对象的构造函数,每个对象都有构造函数(本身拥有或继承而来,继承而来的要结合__proto__属性查看会更清楚点,如下图所示),从上图中可以看出Function这个对象比较特殊,它的构造函数就是它自己(因为Function可以看成是一个函数,也可以是一个对象),所有函数和对象最终都是由Function构造函数得来,所以constructor属性的终点就是Function这个函数。
    constructor继承
      感谢网友的指出,这里解释一下上段中“每个对象都有构造函数”这句话。这里的意思是每个对象都可以找到其对应的constructor,因为创建对象的前提是需要有constructor,而这个constructor可能是对象自己本身显式定义的或者通过__proto__在原型链中找到的。而单从constructor这个属性来讲,只有prototype对象才有。每个函数在创建的时候,JS会同时创建一个该函数对应的prototype对象,而函数创建的对象.__proto__ === 该函数.prototype,该函数.prototype.constructor===该函数本身,故通过函数创建的对象即使自己没有constructor属性,它也能通过__proto__找到对应的constructor,所以任何对象最终都可以找到其构造函数(null如果当成对象的话,将null除外)。如下:
    constructor说明

    5. 总结

       总结一下:

    1. 我们需要牢记两点:①__proto__constructor属性是对象所独有的;② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__constructor属性。
    2. __proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,再往上找就相当于在null上取值,会报错。通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链
    3. prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法,即f1.__proto__ === Foo.prototype
    4. constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function

      本文就此结束了,希望对那些对JS中的prototype__proto__constructor属性有困惑的同学有所帮助。

    最后,感谢这两篇博文,本文中的部分内容参考自这两篇博文:

    若对你有帮助,可以支持一下作者创作更多好文章哦,一分钱也是爱~
    赞赏码

    展开全文
  • constructor 属性

    2021-02-25 15:59:03
    constructor 属性返回所有 JavaScript 变量的构造函数。 实例: "John".constructor // 返回函数 String() { [native code] } (3.14).constructor // 返回函数 Number() { [native code] } false.constructor // ...

    constructor 属性返回所有 JavaScript 变量的构造函数
    实例:

    "John".constructor                 // 返回函数 String()  { [native code] }
    (3.14).constructor                 // 返回函数 Number()  { [native code] }
    false.constructor                  // 返回函数 Boolean() { [native code] }
    [1,2,3,4].constructor              // 返回函数 Array()   { [native code] }
    {name:'John', age:34}.constructor  // 返回函数 Object()  { [native code] }
    new Date().constructor             // 返回函数 Date()    { [native code] }
    function () {}.constructor         // 返回函数 Function(){ [native code] }
    

    你可以使用 constructor 属性来查看对象是否为数组 (包含字符串 “Array”):

    实例:

    function isArray(myArray) {
        return myArray.constructor.toString().indexOf("Array") > -1;
    }
    

    你可以使用 constructor 属性来查看对象是否为日期 (包含字符串 “Date”):

    实例:

    function isDate(myDate) {
        return myDate.constructor.toString().indexOf("Date") > -1;
    }
    
    展开全文
  • JS constructor

    2019-07-09 01:12:48
    1.每个对象都有一个constructor,都指向创建该对象的方法。 2.function对象的prototype的constructor也是指向该方法。如果对prototype进行重写,constructor将消失,但可以 显性添加constructor指向其函数对象。 ...
  • 认识constructor

    2019-08-28 17:09:57
    constructor 是一种用于创建和初始化class创建的对象的特殊方法。 在一个类中只能有一个名为 “constructor” 的特殊方法。 一个类中出现多次构造函数 (constructor)方法将会抛出一个 SyntaxError 错误。 在一个构造...
  • Object Constructor

    2018-11-14 21:03:00
    Object.constructor 返回值 对象的constructor属性返回创建该对象的函数的引用。 // 字符串:String() var str = "张三"; alert(str.constructor); // function String() alert(str.constructor === String...
  • Object constructor

    2018-11-11 22:29:00
    1. Object is an instance of Function... Object does not have a property called constructor so when we call Object.constructor, it actually gives us Object.[[prototype]].constructor (akaObject.__proto_...
  • Copy Constructor

    2017-05-11 13:33:02
    就像default constructor一样,C++ Standard上说,如果class没有声明一个copy constructor,就会隐式的定义一个copy constructor。C++ Standard把copy constructor区分为trivial和nontrivial两种,只有nontrivial才...
  • Constructor

    2018-11-11 15:55:17
    这节课我们来讲Constructor类,这个类表示构造器,直接看代码   package reflection; import helloworld.MyArrayList; import java.lang.reflect.Constructor; import java.lang.reflect.Invocation...
  • Default Constructor

    千次阅读 2017-05-08 10:25:39
    一,何时生成一个default constructor? 当编译器需要时就会生成一个default constructor,这个default constructor只执行编译器所需的行为。例如:下面是一个Student类,编译器生成的default constructor不会将两...
  • es6 constructor 方法

    千次阅读 2018-01-31 18:11:03
    constructor 方法 constructor()方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor()方法,如果没有显式定义,一个空的constructor()方法会被默认添加。 class Point {}...
  • jquery constructor

    2017-11-15 23:53:00
    function F(){ this.a = "aaa"; alert(111); } F.prototype = { constructor:F, } var f = new F.prototype.constructor(); alert(f.a);//aaa F.prototype.constructor();//111...
  • conversion constructor

    2017-04-25 11:49:35
    Ref http://quiz.geeksforgeeks.org/c-plus-plus/constructors/ ... If a class has a constructor which can be called with a single argument, then this constructor becomes conversion constructor because
  • react中 Useless constructor no-useless-constructor报错 原因是构造函数里缺少state,下图是我的,报错,解决方法只要在constructor里面加上this.state={ },加上state对象就可以 ...
  • js constructor

    2017-07-18 11:21:44
    揭开 constructor 在 JavaScript 语言中,constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中。这个 constructor 保存了指向 function 的一个引用。  在定义一个...
  • copy constructor

    2015-08-30 09:23:37
    copy constructor也分为trivial和nontrivial两种 如果class展现出bitwise copy semantics(按位拷贝语义),则不会构造出 copy constructor。 反之,会构造出一个copy constructor。 不要bitwise copy semantics ...
  • constructor属性?

    2020-09-28 21:53:44
    prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数。 function P() {} P.prototype.constructor === P // true 由于constructor属性定义在prototype对象上面,意味着可以被所有实例对象...
  • Constructor详解

    千次阅读 2016-10-26 00:40:53
    Constructor 提供获取构造方法信息,并可生成实例。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,466
精华内容 32,986
关键字:

constructor