JavaScript 面向对象, 类的定义和使用

  • 定义格式
class 类名{
    constructor(变量列表){
        变量赋值;
    }
    方法名(参数列表){
        方法体;
        return 返回值;
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>类的定义和使用</title>
</head>
<body>

</body>

<script>
    class Person{
        constructor(name,age) {
            this.name = name
            this.age = age
        }

        // show method
        show(){
            document.write(this.name+" "+this.age+"<br/>");
        }

        eat(){
            document.write("吃饭<br>");
        }
    }

    let p = new Person("张三",23)
    p.show()
    p.eat()
</script>
</html>

字面量定义类和使用

let 对象名 = {
    变量名 : 变量值,
    变量名 : 变量值,
    ...

    方法名 : function(参数列表){
        方法体;
        return 返回值;
    }
    ...
};
  • 使用格式
    • 对象名.变量名
    • 对象名.方法名();
<script>
    let person = {
        name : "张三",
        age : 23,
        hobby : ["听课","学习"],
        show : function (){
            document.write(this.name+" "+this.age+"<br>")
        },

        eat : function (){
            document.write("吃饭")
        }
    }
    document.write(person.name+person.age+person.hobby[0]+","+person.hobby[1]+"<br/>")
    person.eat()
</script>

继承

  • 继承: 让类与类产生子父类的关系,子类可以使用父类有权限的成员
  • 继承关键字: extends
  • 顶级父类: Object
<script>
    class Person{
        constructor(name,age) {
            this.name = name
            this.age = age
        }

        // show method
        show(){
            document.write(this.name+" "+this.age+"<br/>");
        }
    }

    class Worker extends Person{
        constructor(name,age,salary) {
            super(name, age);
            this.salary = salary
        }
        show(){
            document.write(this.name+this.age+this.salary)
        }
    }

    var w = new Worker("张三",23,10000)
    w.show()
</script

JavaScript 内置对象

  • Number
方法名       说明
parseFloat() 将传入的字符串浮点数转为浮点数
parseInt()   将传入的字符串整数转为整数
<script>
    // 1. parseFloat() 将传入的字符串浮点数转为浮点数
    document.write(Number.parseFloat("2.333"))
    document.write("<br>")
    document.write(Number.parseFloat("2.333")+2)
    document.write("<br>")

    // 2. parseInt() 将传入的字符串整数转为整数
    document.write(Number.parseInt("100"))
    document.write("<br>")
    document.write(Number.parseInt("100")+20)
    document.write("<br>")
    document.write(Number.parseInt("1100ab"))
    document.write("<br>")

</script>
  • Math
方法名 说明
ceil(x) 向上取整
floor(x) 向下取整
round(x) 把数四舍五入为最接近的整数
random() 随机数,返回的是0.0-1.0之间范围(含头不含尾)
pow(x,y) 幂运算的x的y次方
<script>
    // ceil(x) 向上取整
    document.write(Math.ceil(4.4))
    document.write("<br>")

    // floor(x) 向下取整
    document.write(Math.floor(4.4))
    document.write("<br>")

    // round(x) 把数四舍五入为最接近的整数
    document.write(Math.round(4.1))
    document.write("<br>")
    document.write(Math.round(4.6))
    document.write("<br>")

    // random() 随机数,返回的是0.0-1.0之间范围(含头不含尾)
    document.write(Math.random())
    document.write("<br>")

    // pow(x,y) 幂运算的x的y次方
    document.write(Math.pow(2,3))
</script>
  • Date
构造方法                                                  说明
Date()                                                    根据当前时间创建对象
Date(value)                                               根据指定毫秒值创建对象
Date(year,month,[day,hours,minutes,seconds,milliseconds]) 根据指定字段你出去对象(月份是0-11)
成员方法         说明
getFullYear()    获取年份
getMonth()       获取月份
getDate()        获取天数
getHours()       获取小时
getMinutes()     获取分钟
getSeconds()     获取秒数
getTime()        返回距1970年1月1日至今的毫秒数
toLocaleString() 返回本地日期格式的字符串
<script>
    // Date()                                                    根据当前时间创建对象
    let d1 = new Date()
    document.write(d1)
    document.write("<br>")

    // Date(value)                                               根据指定毫秒值创建对象
    let d2 = new Date(20000)
    document.write(d2)
    document.write("<br>")

    // Date(year,month,[day,hours,minutes,seconds,milliseconds]) 根据指定字段你出去对象(月份是0-11)
    let d3 = new Date(2022,9,3,4,5,6)
    document.write(d3)
    document.write("<br>")


    // getFullYear()    获取年份
    document.write(d3.getFullYear())
    document.write("<br>")

    // getMonth()       获取月份
    document.write(d3.getMonth())
    document.write("<br>")

    // getDate()        获取天数
    document.write(d3.getDate())
    document.write("<br>")

    // getHours()       获取小时
    document.write(d3.getHours())
    document.write("<br>")

    // getMinutes()     获取分钟
    document.write(d3.getMinutes())
    document.write("<br>")

    // getSeconds()     获取秒数
    document.write(d3.getSeconds())
    document.write("<br>")

    // getTime()        返回距1970年1月1日至今的毫秒数
    document.write(d3.getTime())
    document.write("<br>")

    // toLocaleString() 返回本地日期格式的字符串
    document.write(d3.toLocaleString())
    document.write("<br>")

</script
  • String 内置对象
构造方法 说明
String(value) 根据指定字符串创建对象
let s="字符串" 直接赋值
成员方法 说明
length属性           获取字符串长度
charAt(index)        获取指定索引处的字符
indexOf(value)       获取指定字符串出现的索引位置,换不到为-1
substring(start,end) 根据指定索引范围截取字符串(含头不含尾)
split(value)         根据指定规则切割字符串,返回数组
replace(old,new)     使用新字符串替换老字符串
<script>
    //     String(value) 根据指定字符串创建对象
    let s1 = new String("Hello")
    document.write(s1)
    document.write("<br>")

    //     let s="字符串" 直接赋值
    let s2 = "World"
    document.write(s2)
    document.write("<br>")

    //     成员方法 说明
    //     length属性           获取字符串长度
    let s3 = "What is you name!"
    document.write(s3.length)
    document.write("<br>")

    //     charAt(index)        获取指定索引处的字符
    document.write(s3.charAt(10))
    document.write("<br>")

    //     indexOf(value)       获取指定字符串出现的索引位置,换不到为-1
    document.write(s3.indexOf("a"))
    document.write("<br>")

    //     substring(start,end) 根据指定索引范围截取字符串(含头不含尾)
    document.write(s3.substring(0,4))
    document.write("<br>")

    //     split(value)         根据指定规则切割字符串,返回数组
    let s5arr = s3.split("\\s")
    for(ss of s5arr){
        document.write(ss)
    }
    document.write("<br>")

    //     replace(old,new)     使用新字符串替换老字符串
    let s6 = "What is youuuu name!"
    document.write(s6.replace("uu","s"))
    document.write("<br>")

</script>
  • RegExp

  • 正则表达: 是一种对字符串进行匹配的规则

构造方法         说明
RegExp(规则)     根据指定规则创建对象
let reg=/^规则$/ 直接赋值
成员方法           说明
test(匹配的字符串) 根据指定规则验证字符串是否符合
  • 规则
表达式 说明
[a]    只能是a
[abc]  只能是abc中的某一个
[1]    只能是1
[123]  只能是123中的某一个
[a-z]  只能a到z中某一个
[A-Z]  只能A到Z中某一个
[0-9]  只能0到9中某一个
{5}    只能出现5次
{4,6}  只能出现4到6次
<script>
    // RegExp(规则)     根据指定规则创建对象
    let regx1 = new RegExp("[1][358][0-9]{9}")
    document.write(regx1.test(13510002000))
    document.write("<br>")
    document.write(regx1.test(12510002000))
    document.write("<br>")

    // let reg=/^规则$/ 直接赋值
    let regx2 =/^[\\_0-9a-zA-Z]{4,16}$/
    document.write(regx2.test("_sdkfj."))
    document.write("<br>")
    document.write(regx2.test("_dkjf23"))
    document.write("<br>")

</script>
  • Array
成员方法       说明
push(元素)     添加元素到数组的末尾
pop()          删除数组末尾的元素
shift()        删除数组最前面的元素
includes(元素) 判断数组是否包含给定的值
reverse()      反转数组中的元素
sort()         对数组元素进行排序
<script>
    // push(元素)     添加元素到数组的末尾
    let arr = [4,2,3,5,1]
    arr.push(8)
    for(let a of arr){
        document.write(a+" ")
    }
    document.write("<br>")

    // pop()          删除数组末尾的元素
    arr.pop()
    for(let a of arr){
        document.write(a+" ")
    }
    document.write("<br>")

    // shift()        删除数组最前面的元素
    arr.shift()
    for(let a of arr){
        document.write(a+" ")
    }
    document.write("<br>")

    // includes(元素) 判断数组是否包含给定的值
    document.write(arr.includes(5))
    document.write(arr.includes(10))
    document.write("<br>")

    // reverse()      反转数组中的元素
    arr.reverse()
    for(let a of arr){
        document.write(a+" ")
    }
    document.write("<br>")

    // sort()         对数组元素进行排序
    arr.sort()
    for(let a of arr){
        document.write(a+" ")
    }
    document.write("<br>")

</script>
  • Set

  • JavaScript中的Set集合, 元素唯一, 存取顺序一致

构造方法 说明
Set()    创建Set集合对象
成员方法     说明
add(元素)    向集合中添加元素
size属性     获取集合长度
keys()       获取迭代器对象
delete(元素) 删除指定元素
<script>
    // Set()    创建Set集合对象
    let s = new Set();

    // add(元素)    向集合中添加元素
    s.add("a")
    s.add("b")
    s.add("c")
    s.add("c")

    // size属性     获取集合长度
    document.write(s.size)
    document.write("<br>")

    // keys()       获取迭代器对象
    var st = s.keys();
    for(let i=0; i<s.size ; i++){
        document.write(st.next().value + " ")
    }
    document.write("<br>")

    // delete(元素) 删除指定元素
    s.delete("a")
    for(let sa of s){
        document.write(sa+" ")
    }
    document.write("<br>")

</script>
  • Map
    • JavaScript的Map集合, key唯一, 存取顺序一致
构造方法 说明
Map()    创建Map集合对象
成员方法       说明
set(key,value) 向集合中添加元素
size属性       获取集合长度
get(key)       根据key获取value
entries()      获取迭代器对象
delete(key)    根据key删除键值对
<script>
    // Map()    创建Map集合对象
    let map = new Map()

    // set(key,value) 向集合中添加元素
    map.set("张三",23)
    map.set("王五",25)
    map.set("王五",26)

    // size属性       获取集合长度
    document.write(map.size)
    document.write("<br>")

    // get(key)       根据key获取value
    document.write(map.get("张三"))
    document.write("<br/>")

    // entries()      获取迭代器对象
    let st = map.entries()
    for(let i = 0; i< map.size ; i++){
        document.write(st.next().value+" ")
    }
    document.write("<br/>")



    // delete(key)    根据key删除键值对
    document.write(map.delete("张三"))
    document.write("<br/>")

    st = map.entries()
    for(let i = 0; i< map.size ; i++){
        document.write(st.next().value+" ")
    }
    document.write("<br/>")

</script>
  • JSON
    • JSON(JavaScript Obect Notation): 是一种轻量级的数据交换格式
    • 基于ECMAScript 规范的一个子集, 采用完全独立于编程语言的文本格式来存储和表示数据
    • 乘法和清晰的层次结构舍不得JSON成为理想的数据交换语言. 易于人阅读和编写, 同时也晚于计算机解析和生成, 并有效提升网络传输效率.
成员方法       说明
stringfy(对象) 将指定对象黑的为json格式字符串
parse(字符串)  将指定json格式字符串解析成对象
<script>
    // 定义天气
    let weather = {
        city : "北京",
        date : "2088-08-08",
        wendu : "10~23",
        shidu : "22%"
    };

    // 1. 天气转换成JSON格式的字符串
    let str = JSON.stringify(weather)
    document.write(str)
    document.write("<br/>")

    // 2. 将JSON格式字符串解析成JS对象
    let weather2 = JSON.parse(str)
    document.write(weather2.city+" "+weather2.date+" "+weather2.wendu+" "+weather2.shidu)
    document.write("<br/>")

</script>

表单校验

<script>

    let dd = document.getElementById("regist")
    dd.onsubmit = check

    function check(){
        let username = document.getElementById("username").value

        let password = document.getElementById("password").value

        let nameRegx = /^[a-zA-Z]{4,16}$/
        let passwordRegx = /^[\d]{6}$/

        if( !nameRegx.test(username)){
            alert("用户名4-16位字母")
            return false
        }

        if(! passwordRegx.test(password)){
            alert("密码6位数字")
            return false
        }

        return true;
    }
</script>

BOM

  • BOM(Browser Object Model) 浏览器对象模型
  • 将浏览器的各个组成部分封装成不同的对象, 方便我们进行操作

Window 窗口对象

  • 定时器
    • 唯一标识setTimeout(功能,毫秒值):设置一次性定时器.
    • clearTimeout(标识):取消一次性定时器
    • 唯一标识setInterval(功能,毫秒值):设置循环定时器
    • clearInterval(标识):取消循环定时器
  • 加载事件
    • window.onload:在页面加载完毕后触发此事件的功能
<script>
    // 定时器
    function fun(){
        alert("该起床了")
    }


    // 设置一次性定时器
    let d1 = window.setTimeout("fun()",2000)
    window.clearTimeout(d1)

    // 设置循环定时器
    let d2 = window.setInterval("fun()", 3000)
    window.clearInterval(d2)


    // 加载事件
    window.onload = function (){
        let div = document.getElementById("div")
        alert(div)
    }
</script>

Location 地址栏对象

  • href 属性
    • 就是浏览器的地址栏, 我们可以通过为该属性设置的新的URL, 使浏览器读取并显示新的URL的内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>location地址栏对象</title>
    <style>
        p{
            text-align: center;
        }
        span{
            color: red;
        }
    </style>
</head>
<body>
    <p>
        注册成功!<span id="time">5</span>秒之后自动跳转到首页...
    </p>
</body>
<script>

    let num = 5;
    function show(){
        num--;
        if(num<=0){
            location.href = "01-windows窗口对象.html"
        }

        let span = document.getElementById("time");
        span.innerHTML = num
    }

    window.setInterval("show()",1000)

</script>
</html>

图片显示

<body>

    <img src="dayanmiao3.png" id="img" alt="da" height="400px" style="display: none">
    <div class="login-form-wrap">
        <h1>黑马程序员</h1>
        <form class="login-form" action="#" id="regist" method="get" autocomplete="off">
            <label>
                <input type="text" id="username" name="username" placeholder="Username..." value="">
            </label>
            <label>
                <input type="password" id="password" name="password" placeholder="Password..." value="">
            </label>
            <input type="submit" value="注册">
        </form>
    </div>
</body>
<script>

    function hideImg(){
        let imgId = document.getElementById("img");
        imgId.setAttribute("style","display:none")
    }
    let sd1 = window.setTimeout(function(){
        let imgId = document.getElementById("img");
        imgId.setAttribute("style","display:block")
    },3000)
    let sd2 = window.setTimeout("hideImg()",6000)
</script>

封装

  • my.js
function getById(id){
    return document.getElementById(id);
}

function getByName(name){
    return document.getElementsByName(name);
}

function getByTag(tag){
    return document.getElementsByTagName(tag)
}
<script>
    // 效果是一样的
    let div2 = getById("div1")
    alert(div2)

    let arr2 = getByName("div2")
    alert(arr2.length)


    // let div1 = document.getElementById("div1")
    // alert(div1)
    //
    // let arr = document.getElementsByName("div2")
    // alert(arr.length)
</script>