Class类的使用及方法

由于本人对Class类的印象不是很深,在此整理一篇博文记录并与大家分享。

Class使用及定义

在js代码中我们经常使用构造函数生成实例对象:

function Obj(i, j) {
  this.i = i;
  this.j = j;
}
 
Point.prototype.toString = function () {
  return '(' + this.i + ', ' + this.j + ')';
};
var p = new Obj(1, 2);

这种写法与Java,c++差异巨大,ES6提供了接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过Class关键字,就可以定义类。

上面的代码用 ES6 的Class改写,就是如下代码


class Obj{
  //构造方法
  constructor(i, j) {
    this.i = i;
    this.j = j;
  }
 
  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}

上面代码定义了一个“类”,可以看到里面有一个 constructor 方法,这就是构造方法,而this关键字则代表实例对象。也就是说,ES5 的构造函数 Point,对应 ES6 的 Point 类的构造方法( constructor 构造方法)。

静态方法(类的方法。加static)

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

StaticState 类的 staticMethod 方法前有 static 关键字,表明该方法是一个静态方法,可以直接在 StaticState 类上调用(StaticState.staticMethod()),而不是在 StaticState 类的实例上调用。如果在实例上调用静态方法,会抛出一个错误,表示不存在该方法。

class StaticState{
    static staticMethod(){
        return 'hello'
    }
}
console.log(StaticState.staticMethod()) // 输出hello

var foo=new StaticState();
foo.staticMethod()
//TypeError: foo.staticMethod is not a function

注意:如果静态方法包含this关键字,这个 this 指的是类,而不是实例。

class StaticState{
    static staticMethod(){
        this.baz()
    }
    static baz() {
        console.log('hello');
    }
    baz() {
        console.log('world');
    }
}
console.log(StaticState.staticMethod())

静态方法 staticMethod 调用了 this.baz,这里的 this 指的是 StaticState 类,而不是 StaticState 的实例,等同于调用 StaticState.baz。

静态属性(类的属性,加static)

静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。因为 ES6 明确规定,Class 内部只有静态方法,没有静态属性。现在有一个提案提供了类的静态属性,写法是在实例属性法的前面,加上static关键字。


class MyClass {
  static myStaticProp = 42;
 
  constructor() {
    console.log(MyClass.myStaticProp); // 42
  }
}

实例属性

实例属性除了定义在constructor()方法里面的this上面,也可以定义在类的最顶层。

class IncreasingCounter {
  constructor() {
    this.initial = 0;
  }
  get value() {
    console.log('Getting the current value!');
    return this.initial;
  }
  increment() {
    this.initial++;
  }
}

上面代码中,实例属性this.initial定义在constructor()方法里面。另一种写法是,这个属性也可以定义在类的最顶层,其他都不变。

class Counter {
  initial = 0;
  get value() {
    console.log('Getting the current value!');
    return this.initial;
  }
  increment() {
    this.initial++;
  }
}

实例方法

class A{
    a(){
        console.log("Hello World E!");
    }
}
var a=new A();
a.a()//输出Hello World E!

super

Class的继承子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

类的继承

  • 继承就是子类拥有父类的各种属性和方法
  • 那什么是类?这里的JS的类即是函数,能产生对象的东西就是类。
### 回答1: 这个问题是关于Pythonclass和def函数使用规则。在Pythonclass是面向对象编程的一个核心概念,用于创建对象实例并定义它们的属性和方法。而def函数则是用于封装可重用的代码块,以便在程序多次使用。在使用class和def函数时,需要遵守一些规则,例如,class的定义需要使用关键字class,并且名一般采用大驼峰命名法;def函数的定义需要使用关键字def,并且函数名一般采用小写字母和下划线命名法。同时,class和def函数的参数和返回值型也需要根据需要进行规定和声明。总之,Pythonclass和def函数使用规则是为了确保代码的可维护性和可读性,以及提高程序的效率和可重用性。 ### 回答2: Python语言class和def方法是两个非常重要的概念。 class是面向对象编程最重要的概念之一,它可以理解为一个模板或者蓝图,用来描述一对象的共性和特性。我们可以通过class来创建一个对象,这个对象就是class的一个实例。在Python,我们通常使用class关键字创建一个,具体的语法如下: ```python class MyClass: # 定义 # 属性和方法 ``` 在,我们可以定义属性和方法。属性通常是用来描述对象的特征和状态,而方法则是用来实现对象的行为和功能。例如,我们可以定义一个人: ```python class Person: # 定义属性 height = 0 weight = 0 name = '' gender = '' # 定义方法 def introduce(self): print("My name is %s, I'm a %s, my height is %s, weight is %s." % (self.name, self.gender, self.height, self.weight)) ``` def方法是定义函数的关键字,它通常用来实现一段特定的功能。在,我们可以定义两种不同型的方法:实例方法方法。 实例方法指的是在的实例上调用方法,它的第一个参数通常是self,表示的实例本身。 ```python class MyClass: def func(self): # 实例方法 pass ``` 方法指的是在调用方法,它的第一个参数通常是cls,表示本身。 ```python class MyClass: @classmethod def func(cls): # 方法 pass ``` 使用class和def方法的时候,需要注意以下规则: 1. 名一般使用驼峰命名法,方法名一般使用下划线分隔。 2. 定义方法时,需要使用缩进控制语句块的范围。 3. 方法的参数可以有默认值,但必须显式指定参数名。 4. 在方法定义时,需要指定至少一个形参,通常为self或cls。 5. 使用方法时,可以通过点号.来访问的属性和方法。 总之,class和def方法是Python语言非常重要的概念和语法,它们为面向对象编程提供了强大的支撑,是我们进行编程必不可少的工具。 ### 回答3: class)是面向对象编程的一个重要概念,它是一种封装数据和实现相关方法的蓝图,可以用来创建具有相同属性和方法的多个对象。通常情况下,一个由属性(成员变量)和方法(成员函数)两部分组成。 在Python,定义一个使用的是class关键字,后面跟着名,名一般使用驼峰命名法,即首字母大写,其它单词首字母也大写。在内部,我们可以定义变量(属性),方法或者函数的实例化就是将具体化为一个个对象,即根据创建出具体的实例(对象)。 def(函数)是Python定义函数的关键字。函数是一段可以重复使用的代码块,用于完成特定的任务需求。通过函数,我们可以实现程序的模块化,使得代码更加易于维护和调试。 在Python,定义函数时可以使用def关键字,后面跟着函数名和参数列表。函数是实现具体操作的代码块。函数的返回值可以通过return语句返回给函数调用者。在调用函数时,可以将参数传递给函数,让函数进行相应的操作。 函数在Python是基础概念,同时也是极为重要的编程组成部分。在使用它们时需要遵循一些规则: 1.名应该采用驼峰命名法。 2.内部的属性应该在__init__方法初始化。 3.方法的第一个参数必须是self。 4.函数名应该采用小写字母和下划线的组合方式。 5.函数应该尽量实现单一的功能。 6.需要使用函数时,只需要在程序调用即可。 7.需要使用时,先实例化,然后通过实例化对象来调用的各种方法。 8.使用函数时需要注意命名空间的问题。 总之,使用函数可以让程序更加易于组织和维护,并且可以提高代码的复用性和扩展性。在实践,应该根据具体需求选择合适的方式来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值