首页 web前端 js教程 如何使用JavaScript构造函数?

如何使用JavaScript构造函数?

Jun 28, 2017 am 11:48 AM
构造函数

构造函数就是初始化一个实例对象,对象的prototype属性是继承一个实例对象。本文给大家分享javascript构造函数详解,对js构造函数相关知识感兴趣的朋友一起学习吧

构造函数就是初始化一个实例对象,对象的prototype属性是继承一个实例对象。

  构造函数注意事项:

1.默认函数首字母大写

2.构造函数并没有显示返回任何东西。new 操作符会自动创建给定的类型并返回他们,当调用构造函数时,new会自动创建this对象,且类型就是构造函数类型。

3.也可以在构造函数中显示调用return.如果返回的值是一个对象,它会代替新创建的对象实例返回。如果返回的值是一个原始类型,它会被忽略,新创建的实例会被返回。    


 function Person( name){
        this.name =name;
      }
       var p1=new Person('John');
登录后复制

等同于:


   function person(name ){
        Object obj =new Object();
        obj.name =name;
         return obj;
      }
       var p1= person("John");
登录后复制

4.因为构造函数也是函数,所以可以直接被调用,但是它的返回值为undefine,此时构造函数里面的this对象等于全局this对象。this.name其实就是创建一个全局的变量name。在严格模式下,当你补通过new 调用Person构造函数会出现错误。

5.也可以在构造函数中用Object.defineProperty()方法来帮助我们初始化:


  function Person( name){
        Object.defineProperty(this, "name"{
          get :function(){
             return name;
          },
           set:function (newName){
            name =newName;
          },
          enumerable :true, //可枚举,默认为false
           configurable:true //可配置
         });
      }  
       var p1=new Person('John');
登录后复制

6.在构造函数中使用原型对象


 //比直接在构造函数中写的效率要高的多
       Person.prototype.sayName= function(){
         console.log(this.name);
      };
登录后复制

但是如果方法比较多的话,大多人会采用一种更简洁的方法:直接使用一个对象字面形式替换原型对象,如下:


 Person.prototype ={
        sayName :function(){
           console.log(this.name);
        },
        toString :function(){
           return "[Person "+ this.name+"]" ;
        }
      };
登录后复制

这种方式非常流行,因为你不用多次键入Person.prototype,但有一个副作用你一定要注意:

使用字面量形式改写了原型对象改变了构造函数的属性,因此他指向Object而不是Person。这是因为原型对象具有一个constructor属性,这是其他对象实例所没有的。当一个函数被创建时,它的prototype属性也被创建,且该原型对象的constructor属性指向该函数。当使用对象字面量形式改写原型对象时,其constructor属性将被置为泛用对象Object.为了避免这一点,需要在改写原型对象的时候手动重置constructor,如下:


 Person.prototype ={
        constructor :Person,
        
        sayName :function(){
           console.log(this.name);
        },        
        toString :function(){
           return "[Person "+ this.name+"]" ;
        }
      };
登录后复制

再次测试:

p1.constructor===Person

true 

p1.constructor===Object

false

p1 instanceof Person

true

以上是如何使用JavaScript构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1660
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1260
29
C# 教程
1233
24
Python中的构造函数 Python中的构造函数 Sep 02, 2023 pm 04:29 PM

在Python中,每个类都有一个构造函数,它是类内部指定的特殊方法。构造函数/初始化程序将在为类创建新对象时自动调用。当对象被初始化时,构造函数将值分配给类中的数据成员。没有必要显式定义构造函数。但为了创建构造函数,我们需要遵循以下规则-对于一个类,它只允许有一个构造函数。构造函数名称必须是__init__。必须使用实例属性定义构造函数(只需将self关键字指定为第一个参数)。它不能返回除None之外的任何值。语法classA():def__init__(self):pass示例考虑下面的示例并

C++语法错误:相同的构造函数签名出现多次,应该怎么解决? C++语法错误:相同的构造函数签名出现多次,应该怎么解决? Aug 22, 2023 pm 04:49 PM

C++是一门强大的编程语言,但是在使用过程中,难免会遇到各种问题。其中,相同的构造函数签名出现多次就是一种常见的语法错误。本文将介绍这种错误的原因和解决方法。一、错误原因在C++中,构造函数用于创建对象时初始化对象的数据成员。但是,如果在同一个类中定义了相同的构造函数签名(即参数类型和顺序相同),编译器就无法确定要调用哪一个构造函数,从而引起编译错误。例如,

go语言有构造函数吗 go语言有构造函数吗 Jan 10, 2023 pm 02:15 PM

go语言没有构造函数。go语言作为结构化的语言是没有面向对象语言中的构造方法的,不过可以通过一些方式实现类似的面向对象语言中构造方法的效果,也就是使用结构体初始化的过程来模拟实现构造函数。

C++语法错误:定义在类外的构造函数必须加上类名作为限定符,应该怎么改正? C++语法错误:定义在类外的构造函数必须加上类名作为限定符,应该怎么改正? Aug 22, 2023 pm 02:00 PM

C++是一种广泛使用的面向对象编程语言,C++中定义类的构造函数时,如果希望将构造函数的定义放在类外部,那么就需要在构造函数的定义中加上类名作为限定符,以指定这个构造函数是属于哪个类的。这是C++语法的一条基本规定。如果在定义类的构造函数时没有遵守这个规定,就会出现编译错误,提示“定义在类外的构造函数必须加上类名作为限定符”。那么,如果碰到这种编译错误,应该

C++报错:构造函数必须在public区域声明,怎么处理? C++报错:构造函数必须在public区域声明,怎么处理? Aug 21, 2023 pm 08:26 PM

在C++编程中,构造函数是用来初始化类的成员变量的重要函数。它在创建对象时自动调用,以确保对象的正确初始化。构造函数必须在类中声明,但是有时会遇到错误提示“构造函数必须在public区域声明”。这个错误通常是因为构造函数的访问权限修饰符错误引起的。在C++中,类的成员变量和成员函数都有一个访问权限修饰符,包括public、private和protected。

什么是构造函数?详解JavaScript中的构造函数 什么是构造函数?详解JavaScript中的构造函数 Aug 04, 2022 pm 03:22 PM

作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下JavaScript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!

聊聊JavaScript中怎么利用Object()函数创建对象 聊聊JavaScript中怎么利用Object()函数创建对象 Aug 04, 2022 pm 04:32 PM

怎么利用Object()函数创建对象?下面本篇文章给大家介绍一下Object()构造函数创建对象的方法(附其他三种创建对象的方法),希望对大家有所帮助!

C++语法错误:只有单一参数的构造函数必须声明为explicit,要怎样解决? C++语法错误:只有单一参数的构造函数必须声明为explicit,要怎样解决? Aug 22, 2023 am 09:01 AM

在C++编程中,可能会遇到如下错误提示:只有单一参数的构造函数必须声明为explicit。这个错误提示可能让初学者感到疑惑,接下来,我们来了解一下在C++中什么是explicit,以及该错误提示出现的原因以及如何解决这一问题。explicit的作用在C++中,如果我们定义了一个只接收一个参数的构造函数,那么我们需要使用关键字explici

See all articles