javascriptnew的时候为啥会执行构造函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascriptnew的时候为啥会执行构造函数?相关的知识,希望对你有一定的参考价值。

js中定义的对象是通过new关键字来调用构造函数来产生对象的。
function Ouser(user,pwd) //构造函数。
this.user=user;
this.pwd=pwd;
this.get=get;
return this;

创建对象的时候:
var tanya = new Ouser("tanya","123");
参考技术A new这个关键字在c++/java/javascript里被用来创建新的对象实例,一般来说,,它做如下两件事:
1.给对象实例分配内存(堆中?);
2.调用构造函数初始化1中返回的内存。

为啥用Java编写参数构造函数时默认的无参数构造函数会失败? [复制]

【中文标题】为啥用Java编写参数构造函数时默认的无参数构造函数会失败? [复制]【英文标题】:Why does the default parameter-free constructor fail when a parameter-constructor is written in Java? [duplicate]为什么用Java编写参数构造函数时默认的无参数构造函数会失败? [复制] 【发布时间】:2020-08-11 03:14:59 【问题描述】:

为什么在Java中给出了参数构造函数时,默认的无参数构造函数会失败?

这个设计的意义何在?

例如:

class Father 
    public String name = "Father";

    public Father(String name) 
        this.name = name;
    


public class Test 
    public static void main(String[] args) 
        Father p = new Father();  //Error
    

【问题讨论】:

Father() 不存在,因为您专门定义了自己的。要么删除它,要么自己创建无参数构造函数。 它不会“失败”。根据JLS #8.8.9,它不是由编译器生成 您已经定义了一个构造函数,因此编译器不会生成默认构造函数。您也不希望生成它,因为这可能会使您的类被实例化为非法状态。如果您需要一个无参数构造函数以及其他构造函数,那么您需要将它们全部声明。 答案:因为语言被定义为以这种方式工作。相关:***.com/questions/11792207 【参考方案1】:

如果不提供构造函数,编译器将生成一个默认的零参数构造函数。

如果您提供任何构造函数,编译器将不会生成任何其他构造函数。在这种情况下,单参数构造函数由您提供,因此编译器不会生成默认构造函数。

【讨论】:

我知道你的意思。但我真正想知道的是,当我定义了自己的构造函数时,为什么编译器不会生成无参?而如果在那种情况下创建了无参构造函数,对项目有什么负面影响? @StackUser 负面影响是失去控制。如果您已经声明了一个或多个构造函数,那么这些就是该类的构造函数。让编译器继续生成默认构造函数意味着现在有一个您没有编码的附加构造函数。编译器怎么可能知道如何以满足你的类契约的方式实现默认构造函数?答:不能。可能在没有显式声明时生成默认构造函数的唯一原因是因为 Java 语言要求每个类至少有一个构造函数。 @Slaw 说得好。您应该输入它作为答案,因为它最能解决 OP 真正询问的内容。

以上是关于javascriptnew的时候为啥会执行构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥执行时没有执行基类的构造函数?

请教一下C#中父类静态构造函数在子类中为啥不会和子类的静态构造函数一起执行

子类为啥要调用父类的构造函数

为啥在这里调用构造函数?

c++(在类中)执行buf=new char[i];delete []buf; 为啥没有调用构造和析构函数?

请问含有多个对象成员的派生类的构造函数执行时不是先执行基类么?为啥这个先输出的是“正式生是”这个