class 类

简介: class 类

【基础认知】


1、构造器中的this指向——类的实例对象


2、类中的构造器不是必须写的,要对实例进行一些初始化的操作,如添加指定属性时才写。


3、如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super时必须要调用的。


4、类中锁定的方法,都是放在了类的原型对象上,供实例去使用


class类的基础使用


(静态属性,只能构造函数访问)


(公有属性,写在构造函数.prototype)


 (实例属性,定义在实例对象this上的属性)

// 手机
    // 实例成员只能通过实例化对象来访问
    // function Phone(brand, price) {
    //   this.brand = brand
    //   this.price = price
    // }
    // 添加方法
    // Phone.prototype.call = function () {
    //   console.log('我可以打电话!!')
    // }
    // 实例化对象
    // let Huawei = new Phone('华为', 5999);
    // Huawei.call();
    // console.log(Huawei);
    class Phone {
      // 构造方法 名字不能修改
      constructor(brand, prive) {
        this.brand = brand;
        this.price = prive;
      }
      // 方法必须使用该语法,不能使用ES5的对象完整形式
      call() {
        console.log('我可以打电话!!!')
      }
    }
    let onePlus = new Phone('1+', 1999)
    onePlus.call()
    console.log(onePlus)


class静态成员


function Phone() {
    }
    // 静态成员,属于类不属于实例对象
    // 静态成员只能通过构造函数来访问
    Phone.name = '手机'
    Phone.change = function () {
      console.log('我可以改变世界')
    }
    Phone.prototype.size = '5.5inch'
    let nokia = new Phone()
    console.log(nokia.size)
    //5.5inch
    console.log(nokia.name)
    //  undefined
    nokia.change()
    // 报错说不是一个函数
    class Phone1 {
      // 静态属性
      static name = '手机';
      static change() {
        console.log('我可以改变世界')
      }
    }
    let aaa = new Phone1();
    console.log(Phone1.name)
    //手机
    console.log(aaa.name)
    // undefined


构造函数继承


// 手机
    function Phone(brand, price) {
      this.brand = brand
      this.price = price
    }
    Phone.prototype.call = function () {
      console.log('我可以打电话')
    }
    // 智能手机
    function SmartPhone(brand, price, color, size) {
      Phone.call(this, brand, price);
      this.color = color
      this.size = size
    }
    // 设置子集构造函数的原型
    SmartPhone.prototype = new Phone;
    SmartPhone.prototype.constructor = SmartPhone;
    // 声明子类的方法
    SmartPhone.prototype.photo = function () {
      console.log('我可以拍照')
    }
    SmartPhone.prototype.playGame = function () {
      console.log('我可以玩游戏')
    }
    const chuizi = new SmartPhone('锤子', 2499, '黑色', '5.5inch');
    console.log(chuizi)
    chuizi.photo()
    chuizi.playGame()


类的函数继承


// 手机
    class Phone {
      constructor(brand, price) {
        this.brand = brand;
        this.price = price;
      }
      call() {
        console.log('我可以电话')
      }
    }
    // 智能手机
    class SmartPhone extends Phone {
      constructor(brand, price, color, size) {
        //super之前调用this会报错
        super(brand, price);
        this.color = color;
        this.size = size;
      }
      photo() {
        console.log('我可以拍照')
      }
      palyGame() {
        console.log('我可以玩游戏')
      }
    }
    let chuizi = new SmartPhone('锤子', 2999, '黑色', '5.5inch')
    console.log(chuizi)
    chuizi.call()
//容易出错的地方 忘记写extends, 构造函数中的形参,  super()


super 这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。


函数:

子类B的构造函数之中的super(),代表调用父类的构造函数。 super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B,因此super()在这里相当于A.prototype.constructor.call(this)。

对象:

在普通方法中,指向父类的原型对象;在静态方法中,指向父类。由于super指向父类的原型对象,所以定义在父类实例上的方法或属性,是无法通过super调用的。

class 作为构造函数的语法糖,同时有 prototype属性和__proto__属性,因此同时存在两条继承链。


类的get 和set


// get 和 set
    class Phone {
      get price() {
        console.log('价格属性被读取了');
        return 'iloveyou'
      }
      set prive(newVal) {
        // 必须要设置一个参数,不然报错
        console.log('价格属性被修改了')
      }
    }
    // 实例化对象
    let s = new Phone();
    // console.log(s.price)
    s.prive = 'free'
    // 类似于vue的watch和computed
相关文章
|
6月前
|
C++
【C++基础】类class
【C++基础】类class
33 1
|
6月前
|
Java
java-基础-Interface、abstract类、Static class 、non static class的区别
【4月更文挑战第5天】Java中的接口、抽象类、静态类和非静态类各具特色:接口仅含抽象方法和常量,用于定义行为规范;抽象类可包含抽象和非抽象方法,提供部分实现,支持多继承;静态内部类不依赖外部类实例,可独立存在,访问外部类的静态成员;非静态内部类持有关联外部类引用,能访问其所有成员。这些机制根据设计需求和场景选择使用。
47 6
|
6月前
|
Java API
Class 类
Class 类
37 1
|
6月前
|
Java
获取 Class 对象
获取 Class 对象
33 1
|
存储 C++
【C++类】 -- 类与static
【C++类】 -- 类与static
62 0
|
JavaScript 前端开发
类(Class)
类(Class)
107 0
|
前端开发 程序员 开发者
class-使用 static 创建静态属性|学习笔记
快速学习 class-使用 static 创建静态属性
121 0
|
JavaScript 程序员
Class-总结class的基本用法和两个注意点
一、注意点一:class关键字区间使用 二、注意点二:Class关键字内部函数
|
Java
Class类
Class类
108 0