首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用new创建的构造函数可以调用自己吗?

用new创建的构造函数可以调用自己。构造函数是一种特殊的函数,用于创建和初始化对象。当使用new关键字调用构造函数时,会创建一个新的对象,并将该对象作为构造函数的上下文(this)传递给构造函数。因此,在构造函数内部,可以通过this来引用新创建的对象,并对其进行操作。

例如,假设有一个构造函数Person,用于创建人的对象:

代码语言:txt
复制
function Person(name, age) {
  this.name = name;
  this.age = age;
  
  // 调用自己
  this.sayHello = function() {
    console.log("Hello, my name is " + this.name);
  }
}

// 使用new关键字调用构造函数创建对象
var person1 = new Person("Alice", 25);

// 调用构造函数内部的方法
person1.sayHello(); // 输出:Hello, my name is Alice

在上面的例子中,构造函数Person接受两个参数name和age,并将它们赋值给新创建的对象的属性。同时,构造函数内部定义了一个方法sayHello,用于打印出对象的名字。通过使用new关键字调用构造函数,我们创建了一个名为person1的Person对象,并调用了该对象的sayHello方法。

总结起来,用new创建的构造函数可以调用自己,通过this关键字引用新创建的对象,并对其进行操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

构造函数和析构函数可以是虚函数,在里面能调用函数

先说构造函数构造函数作为虚函数是不可以,首先c++编译器上不会让你通过 在内存上,我们知道,一个对象会有一个虚函数表,虚函数表在构造函数中初始化,可是一个对象还没有完成实例化,他函数表是不存在...,一个对象需要调用构造函数完成实例化,这里形成了一个悖论 在意义上,将构造函数声明为虚函数没有意义,虚函数主要是实现多态,c++多态是在运行时构建基类基类来调用不同函数,而不是根据情况动态调用构造函数...构造函数作为虚函数让人觉得是你构造函数可能是动态,那我觉得这可能是另一个设计模式,对象固定,构建方法动态来达到多态目的,后面这段是我自己看法 析构函数作为虚函数?...那在构造函数里能调用函数 这个问题之前腾讯后端一面出现过,我当时有点蒙 首先编译器是允许你这么做,但是在构造函数调用函数,可能达不到你想要效果,我们看看下面的代码 class Father...//Father f 代码运行后,构造函数调用了父类函数,我们本来想要调用子类函数

1.4K50

构造函数调用子类方法,写过

GetValue(),根据C++多态特性,应该是要调用DeriveGetValue()返回2,真的是这样?...让我们看下最终输出。 ? 从输出结果看,Base构造函数与虚构函数调用BaseGetValue()返回1,而不是DeriveGetValue()。...为什么Base构造函数与虚构函数即使调用函数,也是调自己函数呢?这跟构造函数与虚构函数调用顺序有关。子类对象构造时候,先调父类构造函数初始化父类,再调子类构造函数初始化子类。...子类对象虚构时候,恰恰相反,先调子类对象虚构函数,再调父类虚构函数。输出结果也证明了这点。 所以如果父类构造函数与虚构函数调用子类函数,那就非常危险了。...因为父类构造函数执行时,子类构造函数还没有执行,说明子类还没有初始化,而这时就调用子类方法,很容易出错,甚至崩溃。

1.4K20
  • 【JavaScript】对象 ③ ( 使用 new Object 创建对象 | 使用 构造函数 创建对象 | 构造函数语法 | 使用 字面量 和 new Object 创建对象方法弊端 )

    - 使用 " 构造函数 " 方式 创建对象 ; 2、构造函数引入 创建对象时 , 属性和方法结构都是相同 , 只是 属性值 不同 , 这里就可以通过 构造函数 只设置 不同 属性值 , 就可以... 函数体 中 ; 3、构造函数语法 在 JavaScript 中 , 可以使用 " 构造函数 " 来创建对象 , 构造函数 本质上是一个普通函数 , 通常情况下 将 构造函数 函数首字母大写...声明构造函数语法 function 构造函数名() { this.属性名 = 属性值; this.方法名 = function(){}; } 调用构造函数创建对象 : 通过 new 关键字 可以 调用...使用构造函数创建对象 var obj = new 构造函数名(); // 3. 调用对象属性 console.log(obj.属性名); // 4....使用 new 关键字调用构造函数创建对象 var person = new Person('Tom', 18); 访问对象属性和方法 : // 4.

    11010

    箭头函数与普通函数(function)区别是什么?构造函数(function)可以使用 new 生成实例,那么箭头函数可以?为什么?

    基本不同 1.写法不同,箭头函数使用箭头定义,普通函数中没有 .箭头函数都是匿名函数,普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。...在普通函数中,this总是指向调用对象,如果用作构造函数,this指向创建对象实例。箭头函数中没有this,声明时捕获其所在上下文this供自己使用。...所以箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响。...obj x fn1.apply(obj); // obj x fn2.call(obj); // window x fn2.apply(obj); // window x 4.箭头函数可以构造函数...,不能使用new 关键字,因为new关键字是调用函数对象constructor属性,箭头函数中没有该属性,所以不能new function fn1(){ console.log

    1.9K10

    【C++】构造函数分类 ② ( 在不同内存中创建实例对象 | 栈内存中创建实例对象 | new 关键字创建对象 )

    一、在不同内存中创建实例对象 1、栈内存中创建实例对象 在上一篇博客 【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用...) 中 , 介绍了 三种类型 构造函数 , 并在 main 函数中 分别 调用了这 3 种构造函数 ; 下面的调用方式 , 调用一个构造函数 , 创建 Student 类实例对象 , 最终将实例对象赋值给了...; Student* s2; 在 C++ 语言中 , 可以使用 new 关键字 , 调用有参构造函数 , 创建 实例对象 ; 在下面的 C++ 代码中 , 声明并定义了 MyClass 类 , 该类定义了一个有参构造函数..., 接受两个整数作为 构造函数参数 ; 在 main 函数中 , 使用 使用 new 关键字 来调用 有参构造函数 创建 MyClass 类实例对象 ; class MyClass { public...new 关键字调用 有参构造函数 MyClass* obj = new MyClass(1, 2); return 0; } 使用 new 关键字 为 新创建 实例对象 在

    16520

    创建子类对象时,父类构造函数调用被子类重写方法为什么调用是子类方法?

    A(); B b = new B(); } } 问题:为什么创建A对象时候父类会调用子类方法?...但是:创建B对象父类会调用父类方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。 但是:由于java语言是静态多分派,动态单分派。...其结果是当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。...A(); B b = new B(); } } 看一下上边代码,是不是恍然大悟?

    6.1K10

    (六)类基本知识

    创建一个实例对象 // 这里就创建了 Person 类 class Person { } const p1 = new Person() console.log(p1) 控制台将会打印出,这里是那个类...类可以不写 constructor 构造函数 理论上是可以不写,但是此处 person 类没有继承任何其他类,如果不写就接收不到参数 7. 类一般方法 什么是一般方法?...除了自带两个 constructor 构造函数 程序根据自己业务场景写方法都叫做:一般函数/一般方法 class Person { // 自带构造函数 constructor...判断函数 this 指向 看函数是怎么调用 call 可以更改 this 指向 apply 可以更改 this 指向 bind 可以更改 this 指向 call、bind、apply三者区别...student 不仅想说出自己 名字 年龄 还想说出自己年纪,这个时候就不能调用父级 speck 函数了,就需要自己定义 speck 函数了 const Person {....} // 定义个

    35020

    理解JS 原型链

    为了简便,一般推荐使用使用字面量:var o= {}; #构造函数创建对象 当我们想要创建自定义对象时,需要用到构造函数构造函数和普通函数有两个区别: 1....便于和普通函数区分,函数名首字母大写。 2. 使用 new 操作符调用,返回一个实例对象。 除此之外和普通函数一摸一样。...person1.sayName === person2.sayName;//false 如果这样的话,我们每构造出来一个对象,都要单独为这个对象创建出一个专属于它自己使用sayName,这是很占用内存...我们先回顾一下那个sayName问题: 怎么让所有的实例对象都是一个sayName方法呢。 现在我们可以使用原型对象来解决这个问题了。...constructor字面意思就很容易理解,构造函数意思。 一句话解释: 每个原型对象都有一个 constructor 属性指向 关联构造函数

    1.7K10

    js构造函数理解

    3、构造函数执行过程 4、构造函数返回值 5、构造函数首字母必须大写? 6、不用new关键字,直接运行构造函数,是否会出错?如果不会出错,那么,new和不用new调用构造函数,有什么区别?...1、什么是构造函数 在 JavaScript 中, new 关键字来调用函数,称为构造函数构造函数首字母一般大写 2、为什么要使用构造函数?...; this.hobby = hobby; this.age = 6; } 当创建上面的函数以后, 我们就可以通过 new 关键字调用,也就是通过构造函数创建对象了。...大小写都可以 6不用new关键字,直接运行构造函数,是否会出错?如果不会出错,那么,new和不用new调用构造函数,有什么区别?...{ return "I am " + this.name; } // 返回this对象 return this; } 可以看出,new调用构造函数,最大特点为,this对象指向构造函数生成对象

    2.2K31

    浅谈JavaScript构造函数

    提到“构造函数”,大部分人会联想到Java类概念,JavaScript也有构造函数,其使用语法与Java或者其他基于类语言中创建对象语法相似。...JavaScript构造函数是一类比较特殊函数,特点为: new关键字调用函数 函数首字母大写 面试中,我经常针对构造函数问两个问题: 构造函数首字母必须大写?...不用new关键字,直接运行构造函数,是否会出错?如果不会出错,那么,new和不用new调用构造函数,有什么区别?...{ return "I am " + this.name; } // 返回this对象 return this; } 可以看出,new调用构造函数,最大特点为,this对象指向构造函数生成对象...3.小结 为了防止因为忘记使用new关键字而调用构造函数可以加一些判断条件强行调用new关键字,代码如下: function Person(name){ if (!

    33030

    100道最新Java面试题,常见面试题及答案汇总

    异常发生时肯定会执行finally,除非在try末尾有强制中止代码:System.exit(0); Q26:什么时候类构造函数会被调用? 答案:每次new创建对象时,都会调用构造函数。...例如,下例中new创建了两个对象,构造函数也被调用了两次。 Q27:一个类可以有多个构造函数? 答案:是的,一个类可以有多个具有不同参数构造函数创建对象构造函数取决于创建对象时传递参数。...Q44:我们是否可以为对象多次调用构造函数? 答案:使用new创建对象时,会自动调用构造函数,对象创建之后,则无法再调用构造函数。...Q58:定义了类显式构造函数之后,还可以使用默认构造函数? 答案:如果没有定义显式构造函数,那么Java将提供一个默认无参数构造函数,但是如果定义了显式构造函数之后,就不能再调用默认构造函数。...Q100:构造函数在继承中调用顺序是什么? 答案:在继承情况下,创建派生类新对象时,首先调用父类构造函数,然后调用派生类构造函数

    5.1K21

    盘点 Java 创建对象 x 操作

    ,因为类也是一种对象;new 也负责调用对象构造函数,下面是使用 new创建对象代码 Object obj = new Object(); 这段代码中,我们在堆区域中分配了一块内存,然后把 obj...下面是这段代码字节码 在 Java 中,我们认为创建一个对象就是调用构造方法,所以我们使用 new Object() 构造对象,其实是调用了 Object 类无参数 构造方法。...但是通过字节码我们发现,对象创建调用构造方法是分开。 字节码 new 表示在堆中创建一个对象,并把对象引用推入栈中。invokespecial 表示调用对象无参数构造方法。... clone 方法创建对象并不会调用任何构造函数。...在反序列化时,JVM 创建对象不会调用任何构造函数,如下代码所示 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream

    60220

    一劳永逸地搞懂 JavaScript中‘this’

    而且,仅仅因为它速度快并不意味着它不是多才多艺。你可以标准函数、箭头函数,甚至加入一些 async-await 魔法来制作它。...基础:构造函数 在其核心,构造函数只是一个函数。但它是一个有抱负函数。它梦想着创建多个对象,每个对象都是根据其框架塑造,但持有自己一套值。...在上面的例子中,箭头函数创建自己 this。相反,它从其封闭范围继承它,当用作构造函数时,可能会导致意外结果。...但不要担心,我们在这里帮助你避免一些常见陷阱。 忘记“new”:当你使用构造函数创建一个新对象时,确保使用new关键字。否则,this将指向全局对象,可能会导致意外结果。...如果需要,使用bind或箭头函数来确保正确上下文。 构造函数和箭头函数:如前所述,箭头函数不绑定自己 this。尝试使用它们作为构造函数可能会导致错误。

    11510

    详解Java构造方法为什么不能覆盖,我钻牛角尖病又犯了....

    构造顺序图 ? 三 但是,看了输出,我就纳闷为什么,为什么第三行不是BigEgg2.Yolk(),不能覆盖?...有说因为子类继承父类时候,先运行父类构造函数;具体说就是运行父类时就会先“调用”父类构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。...这个强行中文语法来解释,达到中文6级了啊。 3. 有说构造方法不是成员函数,故不能继承,所以谈不上覆盖。 这个真的有道理,是java官方文档上。大多数人找到这里估计就满足了。...正确答案 (1).构造器代表这个类本身,在创建之时申请内存。 (2).子类创建时候,会默认在构造方法第一行调用父类默认构造方法-,若修改了必须显示调用。...(这就是为什么创建子类时先创建完父类原因了) 那么很明显了,要是同名类之间可以覆盖了,子类创建时就是创建了两个自己而没有父类。

    2.1K20

    JS 设计模式之工厂模式(创建型)

    我心想,500 个对象字面量,要死要死,还好有构造函数,于是写出了一个可以自动创建用户 User 函数: function User(name, age, career) { this.name...接下来要做事情,就是让程序自动地去读取数据库里面一行行员工信息,然后把拿到姓名、年龄等字段塞进 User 函数里,进行一个简单调用: const user = new User(name, age...),麻烦事情来了:难道每从数据库拿到一条数据,都要人工判断一下这个员工工种,然后手动给它分配构造?...不用自己时刻想着我拿到这组数据是什么工种、我应该怎么给它分配构造函数,更不用手写无数个构造函数——Factory 已经帮我们做完了一切,而我们只需要像以前一样无脑传参就可以了!...同时它应用场景也非常容易识别:有构造函数地方,我们就应该想到简单工厂; 在写了大量构造函数调用了大量 new、自觉非常不爽情况下,我们就应该思考是不是可以掏出工厂模式重构我们代码了。

    58520

    【C++系列(合集)】特性多又复杂?不存在!——这篇C++大全直接干碎(超级大全,精讲)

    非const对象可以调用const成员函数?yes 3. const成员函数可以调用其它非const成员函数?no 4. 非const成员函数可以调用其它const成员函数?...访问限定符限制 三.静态成员函数和非静态成员函数调用关系 请思考下面的几个问题: 静态成员函数可以调用非静态成员函数?...no(无this指针) 非静态成员函数可以调用静态成员函数?...3.拷贝构造函数 行为:在创建对象时,创建一个与已存在对象一模一样新对象 拷贝构造函数: 只有单个形参,该形参是对本类类型对象引用(一般常用const修饰) 在用已存在类类型对象创建新对象时由编译器自动调用...默认生成拷贝构造函数为:浅拷贝 需要自己情况: 自定义类型必须使用拷贝构造(深拷贝) 不需要自己情况 内置类型直接拷贝(浅拷贝/值拷贝) 例:Date类中都是内置类型,默认生成拷贝构造函数为浅拷贝可以直接

    17010

    手写 new 实现足够严谨

    在开始阅读这篇文章之前,你可以对比下面这两段代码输出结果是否一致(假设 myNew 是你自己实现 new 操作): function F(){} F.prototype = null const obj1...这里可以看到: null 重写构造函数原型后,通过 new 构造函数创建实例 __proto__ 并没有跟着变成 null,而是指向了 Object.prototype。...调用构造函数时候做了什么? 这时候,我们可能会想到,通过 new 调用构造函数时候,内部可能做了一些处理,导致最终返回实例对象 __proto__ 和我们预期不一致。...这就能解释为什么 null 重写构造函数原型后,实例 __proto__ 没有跟着改变了,因为在调用构造函数过程中,它链接上了 Object.prototype,可以说,这里实例原型链并没有断开...所以,如果想实现一个更加严谨 new,那么就不应该在内部去调用 Object.create 方法,而应该选择手动创建一个对象并和构造函数建立原型关系,同时,我们还应该加入对构造函数原型类型判断,看它到底是不是一个对象

    50910

    spring-boot-2.0.3不一样系列之源码篇 - run方法(三)之createApplicationContext,绝对有值得你看地方

    如果大家对springboot源码有所研究,可以挑些自己感兴趣或者对自己有帮助看;但是如果大家没有研究过springboot源码,不知道springboot在启动过程中做了些什么,那么我建议大家从头开始一篇一篇按顺序读该系列...,也就是只有默认无参构造方法,我们可认为只是实例化了自己。...AbstractAutowireCapableBeanFactory,抽象有自动装配装配能力bean工厂,赋予了自动装配功能             该类提供bean创建(具有构造函数解析),属性填充...处理运行时bean引用,解析托管集合,调用初始化方法等。支持自动装配构造函数,按名称属性和按类型属性。             ...无参构造方法中也只是调用了super(),我们可认为只是实例化了自己

    2.4K30

    你真的了解AsyncTask?

    ThreadPoolExecutor其他构造函数最终都会调用如下构造函数完成对象创建工作: public ThreadPoolExecutor(int corePoolSize,...,会发现它没有这个构造函数,而是使用默认;默认情况下,Handler会使用当前线程Looper,如果你AsyncTask是在子线程创建,那么很不幸,你onPreExecute和onPostExecute...(处理同步问题) 实际上《Effective Java》里面有一条原则说就是这种情况:不要在同步块里面调用不可信外来函数。...正如上面所说,如果你确定自己做好了同步处理,或者你没有在不同AsyncTask里面访问共享资源,需要AsyncTask能够并行处理任务的话,你可以带有两个参数executeOnExecutor执行任务...方法;默认串行执行,如果明确知道自己在干什么,可以使用executeParallel并行执行。

    45620

    JavaScript 原型深入指南

    如果不是在每次创建新动物时重新创建这些方法,我们将它们移动到自己对象然后我们可以让每个动物引用该对象,该怎么办? 我们可以将此模式称为函数实例化与共享方法。...使用注释来显示底层发生了什么,并假设new关键字调用了Animal构造函数可以这样重写它。...Animal('Leo', 7) const snoop = new Animal('Snoop', 10) 再次说明,之所以这样做,并且这个对象是为我们创建,是因为我们new关键字调用构造函数...因为我们使用是前面学过伪类实例模式,所以在调用Animal构造函数时,需要确保使用new关键字调用它。如果我们不这样做,那么 this 关键字就不会被创建,它也不会隐式地返回。...如果使用new关键字调用构造函数,那么构造函数内部 this 将是构造函数本身实例。

    1.1K20
    领券