javascript学习笔记-面向对象

2023-11-18

javascript学习笔记-面向对象

JavaScript中,现阶段我们可以采用三种方式创建对象

  • 利用字面量创建对象
  • 利用New Object创建对象
  • 利用构造函数创建对象

一、利用字面量创建对象

var obj = {
    uname:'张三',
    age:18,
    sex:'男',
    sayHi: function(){
        console.log('hi~');
    }
}

(1) 里面的属性或者方法我们采用键值对的形式 键 属性名:值 属性值
(2) 多个属性或者方法中间用逗号隔开的
(3) 方法冒号后面跟的是一个匿名函数

调用对象还有两种方法:
(1) 调用对象的属性 我们采取对象名.属性名 我们理解为console.log(obj.uname);
(2) 调用属性还有一种方法 对象名[‘属性名’], console.log(obj[‘uname’]);

二、使用new Object()创建对象

var obj = new Object();  // 创建了一个空的对象
obj.uname = '张三丰';
obj.age = 18;
obj.sex = '男';

// 我们是利用等号 =赋值的方法 添加对象的属性和方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var a = new Object();// 创建了一个空的对象
        // 创建属性 并赋值
        obj.uname = '张三丰';
        obj.age = 18;
        obj.sex = '男';
        obj.sayHi = function(){
            console.log("hi~");
        }
        
        // 对象名.属性名 / 对象名['属性名'] / 对象名.函数名 
        console.log(obj.uname);
        console.log(obj['sex']);
        obj.sayHi();
    </script>
</head>
<body>
    
</body>
</html>

三、使用构造函数创建对象

构造函数:是一种特殊的函数,主要是用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        // new 构造函数名()
        function Star(uname,age,sex){
            this.name = uname;
            this.age = age;
            this.sex = sex;
        }
        var ldh = new Star('刘德华',18,'男');
        console.log(typeof ldh);
        // 构造函数名字首字母要大写
        // 我们构造函数不需要return 就可以返回结果

        var zs = new Star('张三',11,'男');
        console.log(zs.name);
        console.log(zs.age);

    </script>
</head>
<body>
    
</body>
</html>

// 构造函数 泛指某一大类 它类似于java语言中的类
// 对象 特指 具体事物

new 关键字执行过程:

  • new 构造函数可以在内存中创建一个空的对象
  • this 就会指向刚才创建的空对象
  • 执行构造函数里面的代码 给这个空的对象添加属性和方法
  • 返回这个对象
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
       var obj = {
            name:'晓凡老师',
            sex:'女',
            age:18,
            fn:function(){
                console.log("hhhh")
            }
       }
        // 遍历对象的属性
        for(var k in obj){
            console.log(k); // k变量输出 得到的是属性名
            console.log(obj[k]); // 得到的是属性值
        }

    </script>
</head>
<body>
    
</body>
</html>

四、JS内置对象

  • JavaScript中的对象分为三种:自定义对象,内置对象,浏览器对象
  • 前两种对象都是JS基础内容,属于ECMAScript;第三个浏览器对象属于我们JS独有的

4.1 math内置对象

Math是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math不是一个函数对象。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 利用对象封装自己的数学对象 里面有PI 最大值 最小值函数
        var myMath = {
            PI:3.141592653,
            max: function(){
                var max = arguments[0];
                for(var i = 1; i < arguments.length; i++)
                {
                    if(max < arguments[i])
                    {
                        max = arguments[i];
                    }
                }
                return max;
            },
            min: function(){
                var min = arguments[0];
                for(var i = 1; i < arguments.length;i++)
                {
                    if(min > arguments[i])
                    {
                        min = arguments[i];
                    }
                }
                return min;
            }
        }

        console.log(myMath.PI);
        console.log(myMath.max(1,5,9));
        console.log(myMath.min(1,5,9));
    </script>
</head>
<body>
    
</body>
</html>

* Math.PI // 圆周率
* Math.floor() // 向下取整
* Math.ceil() // 向上取整
* Math.round()  // 四舍五入版 就近取整
* Math.abs() // 绝对值
* Math.max()  // 最大值

4.2 Date内置对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
       // Date() 日期对象 是一个构造函数 必须使用new来调用创建我们的日期对象
       var date = new Date();// 没有参数 返回当前系统的当前时间
       console.log(date);

       // 参数常用的写法 字符串型'2019-10-1 8:8:8'
       var date1 = new Date('2019-10-1 8:8:8');
       console.log(date1);
    </script>
</head>
<body>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        // 格式化日期 时分秒
        var date = new Date();
        console.log(date.getHours());
        console.log(date.getMinutes());
        console.log(date.getSeconds());

        // 要求封装一个函数 返回当前的时分秒 格式08:08:08
        function getTimer(){
            var time = new Date();
            var h = time.getHours();
            h = h < 10 ? '0' + h : h;
            var m = time.getMinutes();
            m = m < 10 ? '0' + m : m;
            var s = time.getSeconds();
            s = s < 10 ? '0' + s:s;
            return h + ':' + m + ':' + s;
        }
        console.log(getTimer());
    </script>
</head>
<body>
    
</body>
</html>

4.3 案例分析

  • 核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时,但是不能拿着时分秒相减,比如05分减去25分,结果变成负数
  • 用时间戳来做。用户输入的时间总的毫秒数减去现在的时间的总毫秒数,得到的就是剩余时间的毫秒数
  • 把剩余时间的总毫秒数值转换为天、时、分、秒(时间戳转换为时分秒)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        function countDown(time){
            var nowTime = +new Date();// 获取当前时间的总毫秒数
            var inputTime = +new Date(time);// 返回的是用户输入时间总的毫秒数
            var times = (inputTime - nowTime) / 1000;// times是剩余时间总的秒数

            var d = parseInt(times / 60 / 60 / 24);

            d = d < 10 ? '0' + d : d;
            var h = parseInt(times / 60 / 60 % 24);
            h = h < 10 ? '0' + h : h;
            var m = parseInt(times / 60 % 60);
            m = m < 10 ? '0' + m : m;
            var s = parseInt(times % 60);
            s = s < 10 ? '0' + s:s;

            return d + "天" + h + "时" + m + "分" + s + "秒";
        }
        console.log(countDown('2022-5-1 18:00:00'));
    </script>

</head>
<body>
    
</body>
</html>

4.4 数组对象

  • 数组字面量
  • new Array()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 利用字面量
        var arr = [1,2,3];
        console.log(arr[0]);

        // 利用new array
        var arr1 = new Array();// 创建一个空的数组
        var arr3 = new Array(2);  // 创建一个空数组 数组长度是2
        var arr2 = new Array(2,3); //等价于创建[2,3]
    </script>
</head>
<body>
    
</body>
</html>

  • 使用instanceof 判断是否是数组类型 arr1 instanceof Array
  • push给数组末尾追加新的元素
  • unshift 在数组开头添加一个或者多个新的数组元素
  • pop 删除数组最后一个元素,删除之后 返回那个元素
  • shift 删除数组第一个元素

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var arr = ['pink','red','blue'];
        arr.reverse();// 数组翻转
        console.log(arr);

        var arr1 = [3,4,7,1];
        arr1.sort();// 数组排序

        // 数组升序/降序
        arr1.sort(function(a,b){ 
            return a - b;// a - b升序排列   b - a 降序排列 
        });

        console.log(arr1);
        
    </script>
</head>
<body>
</body>
</html>

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

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // toString() 将我们的数组转换成字符串
        var arr = [1,2,3];
        console.log(arr.toString());
        
        // join 分隔符
        var arr1 = ['green','blue','pink'];
        console.log(arr1.join());
        console.log(arr1.join('-'));
        console.log(arr1.join('&'));
    </script>
</head>
<body>
    
</body>
</html>

4.5 基本包装类型

为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String、Number和Boolean。

基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

var str = 'andy';
console.log(str.length);

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但是上面代码却可以执行,这是因为js将基本数据类型包装成复杂数据类型,执行过程如下:

// 首先 生成临时变量 将简单类型包装成复杂数据类型
var temp = new String('andy');

// 赋值给我们声明的字符变量
str = temp;

// 销毁临时变量
temp = null;

关于字符串的不可变性:指的是里面的值不可变,虽然看上去可以改变内容,但是地址变化了,内存中新开辟了一个内存空间。

var str = 'abc';
str = 'hello';

// 当重新给str赋值的时候,常量'abc'不会被修改,依然存在于内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题,开辟新的内存空间

同样的,字符串的所有方法,都不会修改字符串本身(字符串时不可变的),操作完成之后返回一个新的字符串。

在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var str = 'andy';
        console.log(str.charAt(3));
        // 遍历所有的字符
        for(var i = 0; i < str.length; i++)
        {
            console.log(str.charAt(i));
        }

        console.log(str.charCodeAt(0));
        console.log(str[0]);
    
    </script>
</head>
<body>
    
</body>
</html>

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript学习笔记-面向对象 的相关文章

随机推荐

  • Android完全退出程序

    有过Android开发经验的人都知道 应用程序点击返回键或者代码显示调用了Activity finish 方法都无法完全退出 他们还在进程中 下面分享下Android客户端完全退出程序的方法 1 添加权限
  • WPS VAB支持库下载

    WPS VAB支持库下载 WPS VAB支持库下载 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Smar
  • Linux进程编程(PS: exec族函数、system、popen函数)

    目录 1 进程相关概念 程序和进程 查看系统中的进程 ps指令 top指令 进程标识符 使用getpid 获取 父进程 子进程 2 创建进程fork 进程创建发生了什么 C程序的存储空间如何分配 3 创建进程vfork 区别fork 4 进
  • cifar数据集介绍及到图像转换的实现

    CIFAR是一个用于普通物体识别的数据集 CIFAR数据集分为两种 CIFAR 10和CIFAR 100 The CIFAR 10 and CIFAR 100 are labeled subsets of the 80 million ti
  • pandas笔记(2)——导入excel、csv、txt、sql文件

    导入Excel文件 导入xlsx文件可以使用read excel 基本导入 为避免文件路径里的 被转义 需要在路径前面加转义符 r import pandas as pd df pd read excel r C Users 13513 D
  • git提交代码流程

    当我们从git仓库拉去代码后 我们当前分支将会是master 然后在实际工作中 规范要求我们创建自己的分支 开发后再进行合并 那么这一整个流程是啥样的呢 流程 1 创建自己的分支 git checkout b feat mybranch 2
  • C++11继承构造函数在类中的使用

    继承构造函数 概念 衍生问题 使用示例 注意 扩展使用 函数 示例代码 输出结果 注意 概念 继承构造函数在C 11特性中随之提及 其大概可以理解为 解决了派生类无法直接使用基类中的构造函数的这一问题 正常情况下 基类定义了自己的构造函数
  • Java如何编写无返回值的方法的单元测试

    有一个方法 他的返回值是void也就是说 我们无法对方法的返回值进行断言 但是 既然这个方法是无返回值的方法 那么他一定修改了对象的状态 成员变量 或是进行了输入输出 向某个窗口发送消息 与某个进程通讯 总之 他是有副作用的 如果没有任何副
  • AI催生教育行业“焦虑症”,加拿大高校用机器人教学来解

    过去几年间 安大略省南部的高等院校中涌现出许多类人机器人 这些机器人可以在工程训练 健康护理和皮肤医学等方面为学生们提供帮助 今年六月 麦克马斯特大学和瑞尔森大学通信与设计学院 FCAD 合力引进了由日本电信巨头SoftBank打造的类人机
  • 模块电路选型(7)----人机交互模块

    系列文章目录 1 电源模块 2 主控模块 3 传感器模块 4 通信模块 5 电机驱动模块 6 存储模块 7 人机交互模块 文章目录 前言 一 按键 1 触摸按键 前言 送给大学毕业后找不到奋斗方向的你 每周不定时更新 牛客网 构建从学习到职
  • 【line-height】 line-height详解

    1 line height是什么 w3school定义使用line height属性定义行与行之间的距离 也就是一个行的行高 它不允许使用负值 使用在文本行的时候line height 与 font size 的计算值之差 在 CSS 中成
  • PCE投稿要求

    进入PCE的投稿网址 http mc manuscriptcentral com pce 查了一下 大家都建议创建ORCID号 于是按照指示创建了 蓝色笔圈起来的是一些投稿指导 于是打开Instructions Forms Instruct
  • Flink checkPoint和SavePoint

    savepoint和checkpoint都是flink为容错提供的强大功能特性 能够自动或手动保存job的运行状态 两者区别 checkpoint 应用定时触发 用户保存状态 会过期 内部应用失败重启的时候启用 但是手动cancel时 会删
  • nginx配置转发日志

    http include mime types default type application octet stream log format main remote user time local http x Forwarded fo
  • Vue3 icons 图标无效

    问题描述 需要在账号 密码处加上icon图标 但是引用完element plus icons之后 还是不行 不显示icon图标 后面发现 当前版本的emement plus的icon图标不能直接使用了 前置条件 npm install el
  • Go 服务自动收集线上问题现场

    前言 对于 pprof 相信熟悉 Go 语言的程序员基本都不陌生 一般线上的问题都是靠它可以快速定位 但是实际项目中 很多时候我们为了性能都不会开启它 但是出了问题又要靠它来分析 好在 go zero 已经帮我们很好的集成进来了 我们只需要
  • 深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

    文章目录 1 摘要和背景 1 1 摘要 1 2 背景 2 方法和贡献 2 1 方法 2 1 1 训练过程 2 1 2 loss介绍 2 2 贡献 3 实验和结果 3 1 实验 3 2 结果 4 总结和展望 4 1 总结 4 2 展望 主要贡
  • 【git】git push 本地项目报错 ssh_dispatch_run_fatal

    1 概述 我的一个项目原本是使用如下命令git下来的 git clone git xxx git 昨天还好还好的 今天发现突然无法push项目了 开始自己发现网络比较慢 后面稍微恢复了一下还是不可以 然后git push的时候报错 ssh
  • mybatis-plus整合alibaba.druid实现多数据源配置

    须知 依托于springboot项目实现 一 添加maven依赖
  • javascript学习笔记-面向对象

    javascript学习笔记 面向对象 JavaScript中 现阶段我们可以采用三种方式创建对象 利用字面量创建对象 利用New Object创建对象 利用构造函数创建对象 一 利用字面量创建对象 var obj uname 张三 age