【JavaScript】7_面向对象

64 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

1、面向对象

面向对象编程(OOP)

  1. 程序是干嘛的?

    • 程序就是对现实世界的抽象(照片就是对人的抽象)
  2. 对象是干嘛的?

    • 一个事物抽象到程序中后就变成了对象
    • 在程序的世界中,一切皆对象
  3. 面向对象的编程

    • 面向对象的编程指,程序中的所有操作都是通过对象来完成
    • 做任何事情之前都需要先找到它的对象,然后通过对象来完成各种操作
  • 一个事物通常由两部分组成:数据和功能

  • 一个对象由两部分组成:属性和方法

  • 事物的数据到了对象中,体现为属性

  • 事物的功能到了对象中,体现为方法

              - 数据:                   姓名                   年龄                   身高                   体重

              - 功能:                   睡                   吃    

<script>
    const five = {
            // 添加属性
            name:"王老五",
            age:48,
            height:180,
            weight:100,
​
            // 添加方法
            sleep(){
                console.log(this.name + "睡觉了~")
            },
​
            eat(){
                console.log(this.name + "吃饭了~")
            }
       }
    </script>

2、类

使用Object创建对象的问题:

  1. 无法区分出不同类型的对象
  2. 不方便批量创建对象

在JS中可以通过类(class)来解决这个问题:

  1. 类是对象模板,可以将对象中的属性和方法直接定义在类中 定义后,就可以直接通过类来创建对象
  2. 通过同一个类创建的对象,我们称为同类对象 可以使用instanceof来检查一个对象是否是由某个类创建 如果某个对象是由某个类所创建,则我们称该对象是这个类的实例

语法: class 类名 {} // 类名要使用大驼峰命名 const 类名 = class {}

通过类创建对象 new 类()

    <script>
        // const Person = class {}
​
        // Person类专门用来创建人的对象
        class Person {
​
        }
        // Dog类式专门用来创建狗的对象
        class Dog {
​
        }
​
        const p1 = new Person()
        const p2 = new Person()
       
        const d1 = new Dog()
        const d2 = new Dog()
​
        console.log(p1 instanceof Person)//调用构造函数创建对象
        console.log(d1 instanceof Dog)//true
        console.log(d1 instanceof Person)//false
​
        const five = {
                // 添加属性
                name: "王老五",
                age: 48,
                height: 180,
                weight: 100,
​
                // 添加方法
                sleep() {
                    console.log(this.name + "睡觉了~")
                },
​
                eat() {
                    console.log(this.name + "吃饭了~")
                },
            }
​
            const yellow = {
                name: "大黄",
                age: 3,
                sleep() {
                    console.log(this.name + "睡觉了~")
                },
​
                eat() {
                    console.log(this.name + "吃饭了~")
                },
            }
    </script>

3、属性

类是创建对象的模板,要创建第一件事就是定义类

类的代码块,默认就是严格模式,

类的代码块是用来设置对象的属性的,不是什么代码都能写

    <script>
        class Person {
            name = '孙悟空'
            age = 18
​
            static test = 'test静态属性'// 使用static声明的属性,是静态属性(类属性) Person.test
            static hh = '静态属性'// 静态属性只能通过类去访问 Person.hh
        }
​
        const p1 = new Person()
        const p2 = new Person()
​
        console.log(p1)
        console.log(p2)
    </script>

4、方法

    <script>
        class Person{
​
            name = "孙悟空"
            // sayHello = function(){
            // } // 添加方法的一种方式
​
            sayHello(){
                    console.log('大家好,我是' + this.name)
                } // 添加方法(实例方法) 实例方法中this就是当前实例
​
                static test(){
                    console.log("我是静态方法", this)
                } // 静态方法(类方法) 通过类来调用 静态方法中this指向的是当前类
        }
​
        const p1 = new Person()
        // console.log(p1)
        Person.test()
        p1.sayHello()
    </script>

5、构造函数

在类中可以添加一个特殊的方法constructor

该方法我们称为构造函数(构造方法)

构造函数会在我们调用类创建对象时执行

可以在构造函数中,为实例属性进行赋值

在构造函数中,this表示当前所创建的对象

    <script>
​
        //原来的方法
        // class Person{
        //     name="孙悟空" // 当我们在类中直接指定实例属性的值时,
        //                 // 意味着我们创建的所有对象的属性都是这个值
        //     age=18
        //     gender="男"
​
        //     sayHello(){
        //         console.log(this.name)
        //     }
        // }
​
​
        // 创建一个Person的实例
        // const p1 = new Person("孙悟空", 18, "男")
        // const p2 = new Person("猪八戒", 28, "男")
        // const p3 = new Person("沙和尚", 38, "男")
​
        // console.log(p1)
        // console.log(p2)
        // console.log(p3)
        
        //==========================================
​
        class Person {
            constructor(name,age,gender){
                this.name = name
                this.age = age
                this.gender = gender
            }
        }
​
        const p1 = new Person('孙悟空',14,'男')
        const p2 = new Person('猪八戒',45,'男')
        const p3 = new Person('沙和尚',76,'男')
​
        console.log(p1)
        console.log(p2)
        console.log(p3)
    </script>