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

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

时间:2024-09-22 12:48:10浏览次数:3  
标签: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><......
  • Java基本语法
    Java基本语法注释单行注释//多行注释/**/文档注释/***/快捷方法psvm为加入方法sout为输出Shift+Alt+.为放大字体Shift+Alt+,为减小字体标识符号不能用关键字作为变量名或方法名![关键字](file:///C:/Users/15200/Downloads/Screenshot_202......
  • 快速高效率学习一项新技术或者语法并且保持长期记忆的方法
    技术概述:介绍xxx是什么,例如“Stream是Java8引入的用于处理集合的API”。应用场景:说明xxx可以用来做什么,例如“Stream可用于数据过滤、映射、排序和聚合”。优缺点分析:列出xxx的优点和缺点,例如“Stream的优点是简化代码、支持并行处理;缺点是可能对性能有影响,尤其在小数据......
  • Python基础语法
    1-字面量示例:print(10)print(3.1415926)print(True)print("True")print("3.14.!#$!@#$!@#%#2515926")总结:字面量的含义:代码中,被写在代码中的固定的值常见的字面量类型有:整数、浮点数、字符串、布尔类型2-注释示例:"""单行注释:#多行注释:一对三引号ctrl+a......
  • 将阮一峰老师的《ES6入门教程》的源码拷贝本地运行和发布
    你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。阮一峰老师的《ES6入门教程》应该是很多同学学习ES6知识的重要参考吧,应该也有很多同学在看该文档的时候,想知道这个教程的前端源码是怎么实现的,也可能有同学下载了源码,发现运行起来不能正常切换,然后放弃了。今天分享下《ES6......
  • JavaScript基础语法
    JavaScript基本语法一、变量及数据类型1.变量1.1.变量的定义方法在JavaScript中,你可以使用var、let或const关键字来声明变量。其中,var声明的变量会提升(hoisting)到其作用域的顶部,而let和const(ES6及以后版本引入)声明的变量具有块级作用域,并且const声明的变量一旦赋值后不可重新......
  • 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_......