zoukankan      html  css  js  c++  java
  • js学习笔记(七)

    JavaScript

    JavaScript 的类

    类是面向对象编程中重要的概念,将真实世界中一系列特性相同的事物进行抽象,包含了通用的属性方法。用于快速的生成对象(特征类似的),可以减少重复代码输入和差错工作量。主要包括继承特性和静态方法的调用。

    构造函数constructor()

    够造函数用于接收类初始化的参数,并将初始化参数传入到实例(instance:新生成的对象,包含属性和方法),经由构造函数初始化得到特殊的对象实例。
    - 构造函数也是区分类和对象的重要特征。

    class animal{   
        constructor(name){  //接收参数的构造函数
        this.name = name   //传入的参数,初始化实例的属性
        this.number = 1   //默认的属性设置
        }
    }

    利用类的构造函数可以传入参数实例化一系列不同的对象实例,const instance = new class('argv')

    const kitty = new animal('cat') //实例化,传入cat参数作为实例对象name属性,并返回初始化后的实例,存储在前面的kitty对象中
    const Tom = new animal('koala')
    console.log(kitty.name,Tom.name) //查看实例的name
    //实例化需要调用关键字 new


    一、类的方法

    类中通过函数的方式可以设置一系列方法,同时还可以定义setget方法来进行赋值和取值操作。
    - 与对象类似,可以直接用关键字setget定义赋值取值方法,间接访问实例内部属性;
    - 与对象不同与,需要,分隔方法,同时定义方法也无需函数关键字,类似于es6标准直接定义(与对象中的函数表达式方法区别)

    class animal{   
        constructor(name){  
        this._name = name   //构造函数初始化实例的属性
        this._number = 1   //_下划线标注,避免外部直接访问
        this._age = 1
        }
    
        set age(num){
            this._age = num //设置age属性的方法
        }
        set number(num){   //赋值设置number属性的方法
            this._number = num //将_number设置为实参num
        }
    
        get name(){return this._name} //取属性值
        get age(){return this._age} //取值方法
        get number(){return this._number} //间接访问内部属性
    
        ageAdd(){   //新增增加年龄的方法
            this._age+=1
        }
    }
    
    kitty = new animal('cat') //实例化
    console.log(kitty.name)   //get取值方法
    console.log(kitty.age,kitty.number)  
    kitty.age = 10   //set 赋值方法
    kitty.number = 100
    console.log(kitty.age,kitty.number)  //查看赋值结果
    kitty.ageAdd()   //调用方法
    console.log(kitty.age)   //查看调用方法后的结果


    二、 继承

    当多个类别具有一系列共同的属性和方法时,可以考虑用继承的方式,从父类继承属性方法给子类。
    - 类作为对象的模板,同样父类也可以通过继承作为子类的模板。
    - 继承需要使用关键字class child extends parents{}继承父类属性方法,并在构造函数中调用super(params)调用父类的构造函数。

    //继承样例
    //先将几类共同的特征抽象出一个父类
    class Animal{   
        constructor(name){  
        this._name = name   //构造函数初始化实例的属性
        this._number = 1   //_下划线标注,避免外部直接访问
        this._age = 1
        }
    
        get name(){return this._name} //取属性值
        get age(){return this._age} //取值方法
    
        static log(){console.log('Animal is wonderful')}  //静态方法只能由类调用,不能由实例调用!
    } 
    
    //子类从父类继承 属性和方法
    class Dog extends Animal{ //继承父类所有属性和方法
        constructor(name,contry){ //构造函数
            super(name)    //将参数传到父类的构造函数中,利用父类的构造函数
    
            this._contry = contry //添加的属性
        }
    
        get contry(){return this._contry} //添加取值方法
        addAge(num){this._age+=num}  //可以操作从父类中集成过来的属性,this指向子类的实例
    
        static logg(){console.log('Cat family')}    //增加子类的静态方法
    
    }
    
    kitty = new Dog('jerry','us') //实例化,jerry调用了父类的构造函数,us调用了子类的构造函数,增加了新的属性
    console.log(kitty.name,kitty.contry) //显示父类取值和子类新增的取值函数结果
    kitty.addAge(5)   //子类新增方法调用
    console.log(kitty.age)   //显示结果
    //kitty.log()   //报错,实例不能调用静态方法
    Dog.logg()     //也可调用父类的方法
    Dog.log()       //继承了父类的静态方法
    Animal.log()  //类直接调用内部静态方法



    tips
    1.继承时super()方法一定要写在构造函数内第一行,目的是让this指向目前的子类。如果在this指针后调用super会报错。

  • 相关阅读:
    CodeForces 687B Remainders Game
    CodeForces 689D Friends and Subsequences
    CSU 1810 Reverse
    生成树收录
    吃奶酪
    带逆向思维的并查集
    中位数定理
    种类并查集(关押犯人)
    带权并查集
    分层图
  • 原文地址:https://www.cnblogs.com/Tom-Ren/p/9897844.html
Copyright © 2011-2022 走看看