什么是构造函数

构造函数就是用来初始化对象的。

什么是对象:
对象是由属性和方法组成的。

属性:事物的特征,在对象中用属性来表示(常用名词)

方法:事物的行为,在对象中用方法来表示(常用动词)

对象是由属性和方法组成的。 当属性值是一个函数的时候我们称呼这条属性是 "方法"

属性的结构 是 属性名: 属性值

属性值 任意的数据都可以 字符串 数字 布尔值 undefined null 函数 数组 对象

在 JavaScript 中,对象是一个无序属性的集合,每个属性都有一个键(key)和对应的值(value)。这个值可以是基本类型(如数字、字符串等)或者另一个对象。

const obj = {name:'张三'}

对象是 JavaScript 中最基本的数据类型之一,它具有以下特征:

  1. 对象可以动态地添加、删除和修改属性和方法;
  2. 对象的属性和方法可以被访问、修改和删除;
  3. 对象可以通过原型链继承其他对象的属性和方法。
  4. 对象可以作为参数传递给函数,也可以作为函数的返回值;

那么 什么是面向对象:
简单来说”面向对象“就是“基于对象或者基于类”

JavaScript是一种面向对象的语言,它支持面向对象编程的核心概念,包括封装、继承和多态。它通过对象原型(prototype)实现继承和封装,通过原型链(prototype chain)实现多态

JavaScript的对象是由属性和方法组成的键值对集合,并且可以动态地添加、删除和修改对象的属性和方法。JavaScript支持构造函数和类声明,用于定义对象的结构和行为。它还支持闭包、匿名函数和箭头函数等高级特性,以便更好地组织代码和实现面向对象编程。`

构造函数如何使用:

直接用于创造对象,主要使用new关键字来调用,其中对象的首字母需要大写。
构造函数中不需要写return,返回值即为创建的新对象。(如果写了return也无效)

构造函数与普通函数的区别

  1. 构造函数也是一个普通函数,创建方式与普通函数一样(构造函数习惯上首字母大写)。
  2. 构造函数和普通函数的主要区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)
  3. 调用方式不一样。
    (普通函数–直接调用|构造函数—通过关键字new调用)
        // 构造函数
        function Goods(name, price, count) {
            this.name = name,
                this.price = price,      // 属性、方法前必须加this,this表示当前运行时的对象
                this.count = count
        }
        // 实例对象
        const Mi = new Goods("小米", 1999, 20)
        const Hw = new Goods("华为", 3999, 59)
        const Vo = new Goods("vivo", 1888, 100)
        // 打印
        console.log(Mi);          //name : 小米,price:1999,count:20
        console.log(Hw);          //name : 华为,price:3999,count:59
        console.log(Vo);          //name : vivo,price:1888,count:100

在这里插入图片描述

构造函数的作用

new关键字的使用过程:实例化
实例化(instantiate)是指在面向对象的编程中,把用类创建对象的过程称为实例化。是将一个抽象的概念类,具体到该类实物的过程。

实例化过程

1.创建一个新的空对象
2.构造函数this指针指向创建的那个新对象
3.指向构造函数代码,通过修改this指向的属性,进行添加新的属性
4.返回新的对象

// 构造函数
        function Goods(name, price, count) {
            	this.name = name,
                this.price = price,      // 属性、方法前必须加this,this表示当前运行时的对象
                this.count = count
        }
        // 修改实例对象
        const GoodsName = new Goods("name", 1200, 90);
        // 打印---返回实例新对象
        console.log(GoodsName);   //name:name,price:1200,count:90

在这里插入图片描述

扩展

构造函数中的实例化成员和静态成员

实例化成员

通过实例化创建的对象称为实例化对象,实例化对象中的属性和方法称之为实例成员(实例化属性和实例化方法)

  1. 为构造函数传入参数的时候,创建相同的结构但是不相同的对象
// 1.实例化成员:实例对象上的属性和方法属于实例成员
        function Pig(name) {
            this.name = name 
        }
        const zhuma = new Pig('猪妈')
        const zhuba = new Pig('猪爸')
        console.log(zhuma == zhuba );	//false	创建相同的结构但是不相同的对象

在这里插入图片描述

  1. 实例对象相互独立,实例成员只对当前的实例对象有用
   // 1.实例化成员:实例对象上的属性和方法属于实例成员
        function Pig(name) {
            this.name = name
        }
        const zhuma = new Pig('猪妈')
        const zhuba = new Pig('猪爸')
        zhuma.name = '大猪妈'   //实例属性
        zhuma.zhu = () => console.log('有小猪来喽');        //实例方法

        console.log(zhuma);
        console.log(zhuba);

在这里插入图片描述

静态成员

构造函数的属性和方法被称为静态成员(静态属性和静态方法),静态成员只能通过构造函数来使用

  1. 静态成员只能通过构造函数来访问
  2. 静态方法中的this指向构造函数
// 2.静态成员:静态成员只能通过构造函数来使用
        function Pig(name) {
            this.name = name
        }
        Pig.eyes = 2        //静态属性
        Pig.sayhi = function () {          // 静态方法
            console.log(this);  
        }
        console.log(Pig.eyes);
        Pig.sayhi()

在这里插入图片描述

静态方法

一、Object

静态方法就是只能构造函数Object才能调用的

作用

  1. Object.keys 静态方法获取对象中所有的属性名(键)
  2. Object.values 静态方法获取对象中所有的属性(值)
    注意:返回 的是一个数组
 		const obj = { name: '猪妈', age: 40 }
        // 获得独享的所有键,并且返回是一个数组
        const arr = Object.keys(obj)
        const arr2 = Object.values(obj)
        console.log(arr);       //['name', 'age']
        console.log(arr2);       //['猪妈', 40]

在这里插入图片描述

  1. Object.assign 拷贝法(浅拷贝)
    浅拷贝只是简单的复制,对对象里面的对象属性和数组属性只是复制了地址,并没有创建新的相同对象或者数组。而深拷贝是完完全全的复制一份,空间大小占用一样但是位置不同!!
     	const obj = { name: '猪妈', age: 40 }
        // 获得独享的所有键,并且返回是一个数组
        const arr3 = Object.assign(obj, { city: '动画' })
        console.log(arr3);

在这里插入图片描述

二、Array

Array是内置的构造函数,用于创建数组(创建数组建议使用字面量创建,不用Array构造函数创建)

在这里插入图片描述
在这里插入图片描述

具体使用方法见另一文章内容----数组的使用方法

三、String

在JavaScript中的字符串、数值、布尔具有对象的使用特征,如具有属性和方法。
之所以具有对象特征的原因是字符串、数值、布尔类型的数据是JavaScript底层使用Object构造函数”包装“来的,也被称之为包装类型。

在这里插入图片描述

        const string = '奥特曼喜欢打小怪兽'
        console.log(string.length);         //获取字符串的长度
        console.log(string.split(','));     //用来转换(把字符串才分为数组)
        console.log(string.substring(1,5)); //用字符串的截取
        console.log(string.startsWith('奥',0));   //检测是否已某个字符开头  返回值为布尔值
        console.log(string.includes('奥',0)); //判断一个字符串是否包含在另外一个字符串中,返回值为布尔值

在这里插入图片描述

四.Number

直接使用数字传值

 		const number = 12345.123456
        // toFixed 四舍六入 括号里面写几,就表示四舍六入小数点后面的数字
        console.log(number.toFixed(1));     //12345.1   

在这里插入图片描述

内置构造函数

最要的几种数据类型

基本数据类型

字符串(String),数值(Number),布尔(Boolean),Undefined,Null等

基本数据类型又可以称为包装数据类型,JavaScript中几乎所有的数据都可以基于构造函数创建

基本数据类型也可以包装成引用数据类型

 		const str = '猪妈'
        console.log(str.length);
        const num = new String('猪妈')
        console.log(num);

在这里插入图片描述

引用数据类型

对象(Object),数组(Array),正则(RegExp),日期函数(Date)等

编程思想

JavaScript既可以支持面向过程编程,也可以支持面向对象编程。在 JavaScript 中,我们可以使用函数来定义和调用过程,也可以使用对象和类来实现面向对象编程。
在这里插入图片描述

面向过程

面向过程编程是一种编程思想或范式,它着重于任务的实现过程,将程序划分为一系列的函数或过程,每个函数完成特定的任务,大部分情况下不会涉及到对象或类的概念。

面向过程编程的优点是简单、直接、易于理解和调试,适用于较小规模的项目;缺点是不适用于大规模复杂的项目,随着程序的增大和复杂度的提高,代码的维护和扩展将会变得困难。

面向对象

面向对象编程则是以对象作为程序的基本单位,通过封装、继承和多态等机制来组织和管理代码,更加注重对象之间的交互和关系。

面向对象编程的优点是更加灵活、易于扩展和重用,适用于大规模复杂的项目;缺点是学习和实现成本较高,需要更多的抽象思维和设计能力。

面向对象的特征

多态性、封装性、继承性

构造函数

  1. 封装是面向对象思想中比较重要的一部分,JavaScript面向对象可以通过构造函数实现的封装
  2. 构造函数存在浪费内存的问题
 // 构造函数
        function Goods(name, price, count) {
            	this.name = name,
                this.price = price,      // 属性、方法前必须加this,this表示当前运行时的对象
                this.count = count,
                this.sing = function () {
                    console.log('我会跳舞');
                }
        }
        // 修改实例对象
        const GoodsName = new Goods("name", 1200, 90);
        const GoodsName2 = new Goods("name", 1200, 90);
        // 打印
        console.log(GoodsName);   //name:name,price:1200,count:90
        console.log(GoodsName.sing == GoodsName2.sing); //false		地址不同
        console.log(GoodsName);
        console.log(GoodsName2);

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐