class的基本介绍和使用

创建类并生成实例

// 通过class创建一个类
    class People{
// 类里面constructor函数可以接收传递的参数,同时返回实例化对象
// constructor只要new生成实例时,就会自调用这个函数,如果不写这个函数,类也会自动生成
        constructor(uname,age){
            this.uname=uname
            this.age=age
        }
    }
    //利用类创建对象new
  var lhc= new People("令狐冲",20)
  var dfbb=new People("东方不败")
  console.log(lhc.uname,lhc.age);
  console.log(dfbb.uname);

在类当中添加共有属性

// 通过class创建一个类
    class People{
// 类里面constructor函数可以接收传递的参数,同时返回实例化对象
// constructor只要new生成实例时,就会自调用这个函数,如果不写这个函数,类也会自动生成
        constructor(uname,age){
            this.uname=uname
            this.age=age
        }
        // 共有属性
        kangfu(wg){
            console.log(this.uname+wg);
        }
    }
    //利用类创建对象new
  var lhc= new People("令狐冲",20)
  var dfbb=new People("东方不败")
  console.log(lhc.uname,lhc.age);
  console.log(dfbb.uname);
//   注:类里面所有的函数不用写function,多个函数方法之间不需要符号分割
 lhc.kangfu("独孤九剑")
 dfbb.kangfu("葵花宝典")

类的继承extends

// 类的继承:extends
class Father{
    constructor(){

    }
    money(){
        console.log(100);
    }
}
class Son extends Father{

}
var son=new Son()
son.money()
// 100

super关键字

class Father {
        constructor(x, y) {
            this.x = x
            this.y = y
        }
        sum() {
            console.log(this.x + this.y);
        }
    }
    class Son extends Father {
        constructor(x, y) {
            // 这样会报错,因为this指向的是父类数据
            // this.x=x
            // this.y=y
            // 调用了父类的构造函数
            super(x,y)
        }
    }
    var son = new Son(5, 8)
    son.sum()
    // 13

继承中的注意事项:

 class Father{
        say(){
            return "father"
        }
    }
    class Son extends Father{
        say(){
            // console.log("son");
            console.log(super.say());// 调用父类
        }
    }
    var son=new Son()
    son.say() 
    // 打印的是son,继承中的就近原则,子类有执行子类,子类没有就查找父类
// 打印的是Father

子类拥有自己属性的同时再继承父类属性时,注意super调用的顺序

// 让子类拥有自己属性的同时继承父类属性
class Father{
    constructor(x,y){
        this.x=x
        this.y=y
    }
    sum(){
        console.log(this.x+this.y);
    }
}
class Son extends Father{
  constructor(x,y){
    // 注意:利用super调用父类的构造函数
    // 必须在子类之前调用,否则会报错
    super(x,y)
    this.x=x
    this.y=y
    // super(x,y)在这个地方调用报错
  }
  sum1(){
    console.log(this.x-this.y);
  }
}
   var son=new Son(9,2)
   son.sum()//    11
   son.sum1()//7    

使用类的注意事项:

// var dfbb=new People("东方不败")报错,类里面无变量提升
    class People{
        constructor(uname){
            this.uname=uname
            // kangfu()无法调用必须先加this
            this.kangfu()
        }
        kangfu(){
            console.log(this.uname);
        }
    }
   

  var dfbb=new People("东方不败")
//  在es6中的类没用变量提升,所以必须先定义类,才能通过类实例化对象
// 类里面的共有属性和方法一定要加this使用

类里面的this指向问题

<button>按钮</button>
<script>
    var that;
    var _that;
class People{
        constructor(uname){
            // 把 constructor里的this赋值给全局变量
            _that=this
            this.uname=uname
            // kangfu()无法调用必须先加this
            this.kangfu()
            // console.log(this);指向的是创建的实例化对象
            this.btn=document.querySelector("button")
            this.btn.onclick=this.sing//不加()防止立即调用,只用点击才会调用 
        }
        sing(){
            // this指向的是btn按钮,因为按钮调用了
            console.log(this);
            console.log(this.uname);// 点击按钮会发现出现undefind 因为this指向btn,btn没有该属性
            console.log(_that.uname); // 更换成_that就能拿到了    
        }
        kangfu(){
            console.log(this.uname);
            that=this
            console.log(this);
        }
    }
   

  var dfbb=new People("东方不败")
//   console.log(that===dfbb);true说明this指向调用者

</script>

取值函数(getter)和存值函数(setter)

在“类”的内部可以使用getset关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为。

class Phone {
      constructor(price) {
        this.price = price
      }
      get price () {
        return this._price
      }
      set price (newPrice) {
       
        this._price = newPrice
      }
    }
    let inst= new Phone (300)
    console.log(inst.price);// 打印原值300
    inst.price=666//设置存值函数 setter 666
    console.log(inst.price);// 取值函数getter 666

静态属性和静态方法static:

所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

 class Foo {
  static classMethod() {
    console.log(this);// 静态方法中的this,并不指向实例对象;// 此处,this指向class 本身
    return 'hello';
  }
}

console.log(Foo.classMethod()); // 'hello'

var foo = new Foo();//报错,静态方法不会被实例继承 
foo.classMethod()

静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。

  class MyClass {
  static myStaticProp = 42;

  constructor() {
    console.log(MyClass.myStaticProp); // 42
  }
}
new MyClass()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个消息代理。它通过发送消息和接收消息来实现消息传递的功能。在介绍RabbitMQ的基础之前,我们需要了解一些常用的管理工具,如rabbitmqctl和rabbitmq-plugins,它们用于管理RabbitMQ服务器。 在开始使用RabbitMQ之前,我们可以通过一个简单的"helloworld"例子来了解它的基本使用方法。我们可以发送一个消息"helloworld"并接收它。同时,这个例子还会涉及到RabbitMQ的基本概念,例如交换机和队列。 这些是RabbitMQ的基本介绍,它是一个功能强大的消息代理系统,用于实现消息传递。在后续的文章中,我们将会更深入地了解RabbitMQ,并进行性能测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [RabbitMQ基础概念详细介绍](https://blog.csdn.net/qq_40704861/article/details/123067104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [RabbitMQ基本概念和使用](https://download.csdn.net/download/weixin_38678022/14962733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值