首页 > 其他分享 >【前端】ES6:Class语法和Class继承

【前端】ES6:Class语法和Class继承

时间:2024-09-22 12:48:10浏览次数:14  
标签:ES6 console name age eat 语法 Person Class log

文章目录

1 Class语法

1.1 类的写法

class Person {
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(this.name,this.age)
    }
}
let obj = new Person("kerwin",100)
console.log(obj)

1.2 getter与setter

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul id="list"></ul>
<script>
	class List{
    constructor(ele){
        this.element = ele
    }

    get html(){
        return this.element.innerHTML
    }
    set html(arr){
    	// 生成值为aaa, bbb, cccc的列表
        this.element.innerHTML = arr.map(item=>`<li>${item}</li>`).join("")
    }
}
let obj = new List(document.querySelector("#list"))
obj.html = ["aaa","bbb","cccc"]
</script>
</body>
</html>

1.3 静态属性和静态方法

class Person {
    static name = "Person这个类"
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(this.name,this.age)
    }

    static eat(){
        console.log("eat")
    }
}
let obj = new Person("kerwin",100)

// ES6之前的写法
// Person.myname = "person类的名字"
// Person.mymethod = function(){
//     console.log("mymethod")
// }

console.log(Person.name)
Person.eat()

2 Class继承

ES6 规定,子类必须在constructor()方法中调用super(),否则就会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法。如果不调用super()方法,子类就得不到自己的this对象。

class Person {
    static name = "Person这个类"
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    say(){
        console.log(this.name,this.age)
    }

    static eat(){
        console.log("eat")
    }
}
class Student extends Person{
    constructor(name,age,score){
        super(name,age)
        this.score = score
    }
    say(){
        super.say()
        console.log(this.score)
    }

    static eat(){
        super.eat();
        console.log("student eat")
    }
}
let obj = new Student("kerwin",100,200)
console.log(obj)
obj.say()
Student.eat()
  • 例子
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="box1">
        <h1></h1>
        <ul></ul>
    </div>
    <div class="box2">
        <h1></h1>
        <img src="" alt="" style="width:100px;">
        <ul></ul>
    </div>
    <script>
        var data1 = {
            title: "体育",
            list: ["体育-1", "体育-2", "体育-3"]
        }

        var data2 = {
            title: "综艺",
            url: "https://pic.maizuo.com/usr/movie/5011ee407fb407d47e333a3935ec33d1.jpg?x-oss-process=image/quality,Q_70",
            list: ["综艺-1", "综艺-2", "综艺-3"]
        }

        class CreatBox{
            constructor(select,data){
                this.ele = document.querySelector(select) // <div class="box1">
                this.title = data.title // "体育"
                this.list = data.list   // ["体育-1", "体育-2", "体育-3"]
                this.render()
            }

            render(){
                let oh1 = this.ele.querySelector("h1")
                let oul = this.ele.querySelector("ul")

                oh1.innerHTML = this.title
                oul.innerHTML = this.list.map(item=>
                    `<li>${item}</li>`
                ).join("")
            }
        }
        new CreatBox(".box1",data1)

        class CreateImgBox extends CreatBox{
            constructor(select,data){
                super(select,data)
                // 虽然父类中已经执行了render(),但这个时候找不到img标签,所以需要再次调用render()
                this.imgUrl = data.url
                this.render()
            }

            render(){
                // console.log("111111",this.imgUrl)
                super.render()
                let oimg = this.ele.querySelector("img")
                oimg.src=  this.imgUrl
            }
        }

        new CreateImgBox(".box2",data2)
    </script>
</body>
</html>

标签:ES6,console,name,age,eat,语法,Person,Class,log
From: https://blog.csdn.net/weixin_45980065/article/details/142423770

相关文章

  • SQL 语法学习详细指南
    SQL(StructuredQueryLanguage,结构化查询语言)是一种用于管理和操作关系数据库的标准语言。无论是在数据分析、软件开发还是数据库管理中,SQL都扮演着至关重要的角色。本详细指南将系统地介绍SQL的基本语法和常用操作,涵盖数据查询、数据操作、数据定义和数据控制等关键方面。S......
  • markdown语法
    markdown语法代码块折叠ShowCode这里填充代码<details><summary><fontsize="4"color="orange">ShowCode</font></summary><pre><codeclass="language-cpp">这里填充代码</code></pre><......
  • 将阮一峰老师的《ES6入门教程》的源码拷贝本地运行和发布
    你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。阮一峰老师的《ES6入门教程》应该是很多同学学习ES6知识的重要参考吧,应该也有很多同学在看该文档的时候,想知道这个教程的前端源码是怎么实现的,也可能有同学下载了源码,发现运行起来不能正常切换,然后放弃了。今天分享下《ES6......
  • vue2和vue3的多种语法形式
    <template><divclass="persion"><h2>姓名:{{name}}</h2><h2>年龄:{{age}}</h2><h2>性别:{{sex}}</h2><button@click="nameTel">点击姓名</button>......
  • JavaScript语法入门8 JavaScript中的三种引号
    JavaScript中三种引号,分别是单引号(’xx’)、双引号("xx”)、反引号(`xx`)。三种引号中,单引号和双引号的作用是相同的,用于定义字符串。而反引号是一种扩展功能。单引号、双引号单引号、双引号包裹起来的值是字符串,按照惯例,单引号或者双引号必须成对使用,不能交叉使用。 正确示例:letnam......
  • class 020 递归和master公式
    这篇文章是看了“左程云”老师在b站上的讲解之后写的,自己感觉已经能理解了,所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接,数据结构与算法讲的很好很好,希望大家可以多多支持左程云老师,真心推荐.https://space.bilibili.com/8888480?spm_id_......