美文网首页
class的用法

class的用法

作者: WWWWWWWWWWWWWWM | 来源:发表于2020-02-10 17:33 被阅读0次

1、基本写法

class test {
  constructor(x,y) {
  }
  print(a) {
    console.log(a)
  }
}
var Test = new test()
Test.print(213)

2、class 的getter和setter

var mm = 123;
console.log(mm)  //123
class test {
    constructor(x, y) {
    }
    get value() {
        return mm
    }
    set value(a) {
        mm = a
    }
}

var Test = new test();
Test.value = 213; //设置成功
Test.value  //获取成功
console.log(mm)    //213

3、静态方法

  • 类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
class test {
    constructor() {
    }
    static print (a) {
      console.log(a)  
    }
  }
  var Test = new test();
  
  test.print(123)  //123,静态方法只有构造函数可以调用
  Test.print(123)  //报错,说明这个实例上面没有这个print方法

4、class的继承的基本写法

class A {
 constructor() {
}
}

class B extends A {
constructor () {
  super()  //这个调用是必须的,相当于把A的方法给执行一遍
}
}

tip:继承会把父类的所有方法都给继承过来,包括static静态方法

5、class里面的super

super这个关键字,既可以当作函数使用,也可以当作对象使用
  • 当函数使用
class A {
 constructor() {
  }
}
class B extends A {
 constructor () {
  this.b= 222 //只有调用super之后,才可以使用this关键字,否则会报错,因为子类的构建依赖父类
  super()  //super()只能使用在constructor
  }
}
  • 当对象使用
    第一种情况
class A {
 constructor() {
    this.x = 1;
  }
  pp() {
    console.log(this.x)
  }
}
class B extends A {
 constructor () {
  super();
  this.x = 2;
  }
  mm () {
    super.pp(); //这个super指的是构造函数A
  }
}
let b= new B();
b.mm() //2

分析:b.mm() 结果为2是因为在执行super.pp()时,里面的this指的是B里面的this,所以为2;
第二种情况(此处有疑问,用nodejs结果打印this.x结果是3,super.x可以修改,但是用webpack的就不可以)

class A {
    constructor() {
      this.x = 1;
    }
  }
  A.prototype.x = 111
  class B extends A {
    constructor() {
      super();
      this.x = 2;
      super.x = 3;
      console.log(super.x); // 111  (super.x的值不能更改)
      console.log(this.x); // 2
    }
  }
  let b = new B();

解析: super.x里面的值指的是A.prototype.x的值,同时super.x不能修改A.prototype.x的值

6、类的 prototype 属性和proto属性

(1)子类的proto属性,表示构造函数的继承,总是指向父类。

(2)子类prototype属性的proto属性,表示方法的继承,总是指向父类的prototype属性。
(总结:就是说继承过来的构造函数上的proto指的是父类,原先构造函数上面没有proto,只有实例对象有,比如构造函数的prototype
=== 实例对象的proto

  • 这是继承的构造函数的proto
class A {
}

class B extends A {
}

B.__proto__ === A // true
B.prototype.__proto__ === A.prototype // true
  • 这是继承的实例对象的proto
var p1 = new Point(2, 3);
var p2 = new ColorPoint(2, 3, 'red');

p2.__proto__ === p1.__proto__ // false
p2.__proto__.__proto__ === p1.__proto__ // true

子类实例的proto属性的proto属性,指向父类实例的proto属性。也就是说,子类的原型的原型,是父类的原型。

相关文章

  • vue:class与v-bind

    :class用法 v-bind用法

  • class的用法

    1、基本写法 2、class 的getter和setter 3、静态方法 类相当于实例的原型,所有在类中定义的方法...

  • java.lang.Class.getDeclaredMetho

    java.lang.Class.getDeclaredMethod()方法用法 描述java.lang.Class...

  • classnames

    classnames可以非常简单的进行class 赋值 npm介绍的用法使用方法 单个class 多个class ...

  • class 相关

    class 基本用法[https://es6.ruanyifeng.com/#docs/class] static...

  • Python Class的用法

    献给莹莹 1.Python Class的基础用法 类(Class): 用来描述具有相同的属性和方法的对象的集合。它...

  • class 类的用法

    1.类的用法 2.类的静态成员(静态属性和静态方法) 注意: 1.静态方法就在方法前面添加static.2.静态方...

  • class 类的用法

    一、类的声明 对比我们之前使用构造函数的形式 二、类的实例方法 类的实例方法内部可以使用this.的形式获取实例的...

  • class类的用法

  • class用法详解

    概述 类的由来 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过clas...

网友评论

      本文标题:class的用法

      本文链接:https://www.haomeiwen.com/subject/uzeqgctx.html