使用new运算符和默认的构造方法创建对象,构造函数中new对象

  使用new运算符和默认的构造方法创建对象,构造函数中new对象

  本文带给您一些关于javascript的知识,包括对象的构造函数和新操作符。构造函数是对象的所有成员方法中第一个被调用的。下面就来看看吧,希望对你有帮助。

  【相关推荐:javascript视频教程,web前端】

  

23.JavaScript对象的构造函数和操作符new

  

一、前言

  上面提到的对象创建方法都直接使用语法let obj={.}.具体方法如下:

  让用户={

  姓名:小明,

  .}这种对象创建方法简单直接,但是对象的代码不能重用。当创建许多相似的对象时,代码量会非常高。

  此时,您需要使用构造函数和new运算符来构建类似的对象。

  

二、构造函数

  如果学过其他面向对象语言的童鞋应该对构造方法比较熟悉,尤其是学过C的童鞋应该印象非常深刻。

  

构造函数概念和用途

  在其他面向对象的语言中,构造函数通常是这样定义的:

  我们可以简单理解为构造函数是所有对象中最早被调用的成员方法。常用于初始化对象的状态,如人名、车次等。

  构造函数对应析构函数,析构函数是对象所有成员方法中最后一个调用的,往往是因为对象失去了存在价值,被用来回收对象资源。

  

对象的生命周期

  一个对象从创建到回收可分为3个阶段,如下所示:

  其中,对象创建阶段的主要工作由构造器完成,包括对象的初始化、关系的连接等。执行阶段主要是对象的函数的调用,用来配合整个项目的执行,通常由普通函数(对象的成员函数)完成。销毁阶段由析构函数接管,析构函数用于清除对象占用的内存空间,防止内存泄漏的发生。

  

JavaScript构造函数

  与其他面向对象语言相比,JavaScript对象的构造函数比较特殊。可以是任何普通的函数,不需要在对象中定义。只有两个协议:

  构造函数的名字通常以大写字母开头;构造函数智能由new运算符执行;例如:

  职能人员(姓名){

  this.name=name}上面代码中的People函数可以作为构造函数,也是一个普通的函数。我们已经介绍过,如果在普通函数中使用这个,那么这个的内容依赖于调用它的对象(obj.func())。如果调用函数时没有使用对象,那么这在非严格模式下是窗口,在严格模式下是未定义的。

  通常,直接调用构造函数会得到不正确的结果。如果我们想将函数作为构造函数调用,我们需要使用一个新的关键字new。

  以下代码使用new关键字创建了两个People对象:

  让小明=新人(小明);

  让小红=新人(小红);

  console.log(晓明. name);

  console.log(小红. name);下面是代码的执行结果:

  

三、new 关键字

  用new调用函数时,该函数成为构造函数。此时,引擎将执行以下操作:

  创建一个新的空对象{0},并将该空对象分配给此;执行构造函数体,构造函数体通常通过这个构造对象的内部结构;此返回的值;你没有看错。用new调用函数后,函数有返回值,即使定义函数时没有return语句。

  新人(小明)的代码大概类似于下面的代码:

  职能人员(姓名){

  this={ };//隐式创建一个空对象

  this.name=name

  还这个;//返回创建的对象}所以用new调用构造函数后,得到一个由构造函数塑造的对象。

  使用new关键字的好处是,我们可以编写一次构造函数代码,然后在任何地方创建一个类似的对象。

  例如:

  让小明=新人(小明);让小红=新人(小红);让明明=新人(明明);想象一下,如果一个对象的代码有几百行,是不是比{.}方法?这就是面向对象中的代码取数,可以大大减少代码量,提高开发速度。

  

四、匿名构造函数

  如果我们只希望对象创建一次,那么我们可以简化构造函数的定义,使用new直接调用匿名函数,创建一个对象:

  let xiaoming=new function(){

  this.name=晓明;}console.log(晓明. name);代码的执行结果如下:

  使用匿名函数作为构造函数的结果和常规构造函数没有区别。唯一的区别是匿名构造函数不能被重复调用(因为没有名字)。这种方法通常用于不需要代码重用的情况。

  

五、构造函数的返回值

  通常情况下,构造函数不需要使用return语句。它唯一的目的就是把对象的属性写入这个,然后默认直接返回这个对象。

  但是,由于JavaScript对构造函数几乎没有约束,如果我们在普通函数中写一个return语句会怎么样呢?引擎将做出以下两种选择:

  如果return返回一个对象,则返回这个对象而不是这个;如果return返回一个基本类型,忽略return语句,继续返回这个;从引擎的处理方法不难看出,构造函数的主要任务是创建对象,处理并返回对象。如果构造函数用于返回基本类型,则没有意义。

  举个栗子:

  职能人员(姓名){

  this.name=name

  return { name: Nobody };}console.log(新人(小明)。姓名);代码执行结果如下:

  可以看到,没有返回对象名晓明,而是用Nobody对象代替了晓明。

  如果使用return返回基类型,情况如下:

  函数Dog(){

  this.name= hashiqi

  返回666;}console.log(新狗()。姓名);代码执行结果如下:

  可以看出,返回底层类型时,return语句没有任何作用。

  

六、利用构造函数为对象添加方法

  在构造函数中,我们不仅可以添加对象的属性,还可以用构造函数初始化对象的成员方法,因为JavaScript函数也可以赋给变量。

  例如,我们可以向People对象添加一个sing方法:

  职能人员(姓名){

  this.name=name

  this.sing=function(){

  console.log(`${name}是个快乐的男孩.`);

  } }让小明=新人(小明);晓明. sing();上面的代码在构造函数中给对象添加了一个方法,代码执行结果如下:

  

结语

  到目前为止,我们介绍的对象都只是从JavaScript的一种特殊数据类型(数据结构)的角度。事实上,在面向对象领域,类是绝对的主角。

  我们后面会一步步介绍JavaScript的各种特性,包括面向对象的知识,类,继承等等。

  

总结

  本文主要介绍JavaScript对象的构造方法和new关键字。需要掌握和注意的要点包括:

  构造函数是一个常规函数,但是有一些大写的约定;箭头不能用作构造函数,因为它没有此构造函数;需要用new关键字调用构造函数,并返回一个对象;当构造函数本身有return语句时,引擎会做特殊处理;【相关推荐:javascript视频教程,web前端】以上是JavaScript对象的构造函数和new运算符的详细说明(示例详解)。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: