返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS中构造函数的基本特性与优缺点
  • 387
分享到

JS中构造函数的基本特性与优缺点

2024-04-02 19:04:59 387人浏览 泡泡鱼
摘要

构造函数:如用函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor) function Person(){ this.name = "

构造函数:如用函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor)

function Person(){
    this.name = "zqq";
    this.age = 28;
}
var p = new Person();

当以new调用构造函数(执行var p = new Person())时,函数内部会发生以下情况:

1.创建一个空对象

var p = {};

2.this变量指向对象p

Person.call(p)

3.p继承了构造函数Person()的原型

p.__proto__ = Person.prototype

4.执行构造函数Person()内的代码

构造函数和普通函数的区别:

1.构造函数使用new关键字调用;普通函数不用new关键字调用;

var p = new Person();
var p = Person();

2.构造函数内部可以使用this关键字;普通函数内部不建议使用this,因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数

在构造函数内部,this指向的是构造出来的新对象

在普通函数内部,this指向的是window全局对象

3.构造函数默认不用return返回值;普通函数一般都有return返回值

构造函数会默认返回this,也就是新的实例对象

普通函数如果没有return值的话,返回undefined

如果使用了return,那返回值会根据return值的类型而有所不同

return的是五种简单数据类型:String,Number,Boolean,Null,Undefined的话,构造函数会忽略return的值,依然返回this对象;而普通函数会返回return后面的值
 
function Person(){
    var a;
    this.name = "zqq";
    this.age = 28;
    return a;
}
var p = new Person();//返回this对象
var p = Person();//因为a没初始化,所以a是undefined,而undefined属于简单数据类型,所以返回undefined,String,Number,Boolean,Null同理
 
 
如果return的是引用类型:Array,Date,Object,Function,RegExp,Error的话,构造函数和普通函数都会返回return后面的值
 
function Person(){
    var arr = [];
    this.name = "zqq";
    this.age = 28;
    return arr;
}
var p = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
var p1 = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理

4.构造函数首字母建议大写;普通函数首字母建议小写

构造函数的优点与缺点

优点就是能够通过instanceof识别对象,缺点是每次实例化一个对象,都会把属性和方法复制一遍

function CreateObj(uName) {
              this.userName = uName;
              this.showUserName = function () {
              return this.userName;
            }
        }
 
var obj1 = new CreateObj('ghostwu');
var obj2 = new CreateObj('卫庄');
 
console.log( obj1.showUserName === obj2.showUserName ); //false

从以上执行结果,可以看出obj1.showUserName和obj.showUserName不是同一个【在js中,引用类型比较的是地址, 函数是一种引用类型】,而是存在两个不同
的内存地址,因为每个对象的属性是不一样的,这个没有什么问题,但是方法执行的都是一样的代码,所以没有必要复制,存在多份,浪费内存.这就是缺点

怎么解决构造函数的方法复制多次的问题?

function CreateObj(uName) {
  this.userName = uName;
  this.showUserName = showUserName;
}
function showUserName() {
  return this.userName;
}
var obj1 = new CreateObj('ghostwu');
var obj2 = new CreateObj('卫庄');
console.log(obj1.showUserName === obj2.showUserName); //true

把对象的方法指向同一个全局函数showUserName, 虽然解决了多次复制问题,但是全局函数非常容易被覆盖,也就是大家经常说的污染全局变量.

比较好的解决方案?

通过原型(prototype)对象,把方法写在构造函数的原型对象上

function CreateObj(uName) {
  this.userName = uName;
}
CreateObj.prototype.showUserName = function () {
  return this.userName;
}
var obj1 = new CreateObj('ghostwu');
var obj2 = new CreateObj('卫庄');
console.log(obj1.showUserName === obj2.showUserName); //true

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: JS中构造函数的基本特性与优缺点

本文链接: https://lsjlt.com/news/152898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中构造函数的基本特性与优缺点
    构造函数:如用函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数(constructor) function Person(){ this.name = "...
    99+
    2024-04-02
  • C++分析构造函数与析造函数的特点梳理
    目录构造函数的调用构造函数的分类及调用拷贝构造的调用时机深拷贝与浅拷贝构造函数的调用 默认情况下编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体实现)--完成对象的初始...
    99+
    2024-04-02
  • MongoDB的基本特性与内部构造的讲解
    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mong...
    99+
    2024-04-02
  • C++浅析构造函数的特性
    目录构造函数的概念构造函数的特性只能有一个构造函数构造函数的概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值...
    99+
    2024-04-02
  • java构造函数的特点有哪些
    Java构造函数的特点有以下几点:1. 构造函数的名称必须与类名完全相同,且没有返回类型,包括void类型。2. 构造函数在创建对象...
    99+
    2023-08-31
    java
  • C++构造函数的特性是什么
    这篇文章主要介绍“C++构造函数的特性是什么”,在日常操作中,相信很多人在C++构造函数的特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++构造函数的特性是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • golang函数的优点与缺点对比
    go 函数的优点包括:提高代码可重用性、模块化、封装性、可测试性和并发性;缺点包括:代码重复、命名冲突、性能开销、复杂性和调试困难。通过计算矩形面积的示例展示了函数的优点,包括提高代码可...
    99+
    2024-04-19
    golang 优缺点 封装性
  • golang函数的优点与缺点概览
    go 函数提供了模块化、可重用性、可测试性、并发性和值传递等优点。但同时,它也存在函数调用开销和嵌套级别深的问题。 Go 函数的优势与劣势概述 函数是对代码的命名块,用于执行特定的任务...
    99+
    2024-04-20
    函数 golang
  • golang函数的优点与缺点权衡
    golang 函数的优点包括可重用性、模块化、封装、并发性和简洁性。缺点包括性能开销、代码膨胀和调试复杂性。例如,函数 sumevennumbers 计算偶数之和,展示了可重用性和封装的...
    99+
    2024-04-20
    函数 golang
  • JS的Function与构造函数怎么使用
    这篇文章主要讲解了“JS的Function与构造函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS的Function与构造函数怎么使用”吧! 1.概述Function是...
    99+
    2023-06-21
  • java函数——构造函数与成员函数的异同点
    构造函数和成员函数的异同点1、外界调用角度构造函数只能在创建对象时调用;成员函数只能在对象创建之后调用,可以重复的。相关视频教程分享:java视频2、返回值角度构造函数不需要返回值;成员函数可需可不需。3、权限修饰符构造函数可以用任意权限修...
    99+
    2015-09-16
    java入门 java 构造函数 成员函数 区别
  • golang函数与goroutine的优缺点比较
    函数用于顺序执行任务,简单易用,但存在阻塞和资源受限问题。goroutine 是并发执行任务的轻量级线程,具有高并发性、可伸缩性和事件处理能力,但使用复杂,开销较大,且难以调试。在实战中...
    99+
    2024-04-25
    golang 同步机制
  • C++ 函数中引用参数的优缺点
    c++++ 引用参数的优点包括传递效率高(避免内存操作)和可修改原始数据。缺点包括易出错(引用必须绑定有效变量)和缩短变量作用域(可能导致内存泄漏)。 C++ 函数中引用参数的优缺点 ...
    99+
    2024-04-19
    c++ 引用参数 作用域
  • C++ 函数中指针参数的优缺点
    c++++指针参数优点:1、内存效率;2、效率;3、灵活性;4、多态性。缺点:1、不安全;2、难以理解;3、执行开销;4、难以调试。 C++ 函数中指针参数的优缺点 优点: 内存效...
    99+
    2024-04-19
    c++ 指针参数
  • MariaDB Codership Galera Cluster的特性和架构优缺点分别是什么
    MariaDB Codership Galera Cluster的特性和架构优缺点分别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 ...
    99+
    2024-04-02
  • C++中转换构造函数与默认函数的优先级是什么
    今天小编给大家分享一下C++中转换构造函数与默认函数的优先级是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2024-04-02
  • C++ 函数与宏的区别和优缺点对比
    函数是运行时执行的代码块,可返回结果;宏是预处理时展开的常量或代码片段,不可返回结果。函数易读、可重用、代码可读性高,但效率低;宏编译开销小、性能优,但代码可读性差、难以调试。 C++...
    99+
    2024-04-11
    函数 c++ 作用域 代码可读性
  • Kotlin类与属性及构造函数的使用详解
    目录1.类的属性 filed2.构造函数3.执行顺序4.延迟初始化5.惰性初始化1.类的属性 filed 1)在kotlin中定义属性,必须赋初始值,要不编译器检查不通过。这个和ja...
    99+
    2024-04-02
  • C#中的析构函数有什么特点
    C#中的析构函数是一种特殊的方法,用于释放对象占用的资源。析构函数在对象被销毁时自动调用,无法直接调用析构函数,也不能在C#代码中显...
    99+
    2024-03-06
    C#
  • JS构造函数中this和return的区别是什么
    本篇文章给大家分享的是有关JS构造函数中this和return的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。先看一段代码,func...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作