Class类
Posted mcgee0731
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Class类相关的知识,希望对你有一定的参考价值。
Class类
以前创建构造函数
function Person(name){ this.name = name } Person.prototype.say = function(){ console.log( `hi, my name is ${this.name}`); }
ES6 的类,完全可以看作构造函数的另一种写法
class Point { // ... } typeof Point // "function" Point === Point.prototype.constructor // true
class Point { constructor() { // ... } toString() { // ... } toValue() { // ... } } // 等同于 Point.prototype = { constructor() {}, toString() {}, toValue() {}, };
- constructor 方法
一个类必须有constructor()方法,如果没有显式定义,一个空的constructor()方法会被默认添加
constructor()方法默认返回实例对象(即this),完全可以指定返回另外一个对象
class Foo {
constructor() {
return Object.create(null);
}
}
new Foo() instanceof Foo
// false
实例方法,静态方法 static
class Person{ //定义一个person类型 constructor(name){ //构造函数 this.name = name //当前person类型的实例对象 } say(){ console.log( `hi, my name is ${this.name}`); } static create (name){ //静态方法内部this不会指向某个实例对象,而是当前的类型 return new Person(name) } } const p = new Person("mcgee") p.say() const jack = Person.create("jack") jack.say()
- 类的继承 extends
子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象
class Student extends Person{
constructor(name,number)
{
super(name) //super对象,始终指向父类,调用它就是调用父类的构造函数
this.number = number
}
hello(){
super.say()
console.log(`my school number is ${this.number}`);
}
}
const ex = new Student("mcgee",123)
console.log(ex.name);
ex.hello()
- 类不存在变量提升
new Foo(); // ReferenceError
class Foo {}
- 父类静态方法也会被子类继承
class A {
static hello() {
console.log(\'hello world\');
}
}
class B extends A {
}
B.hello() // hello world
以上是关于Class类的主要内容,如果未能解决你的问题,请参考以下文章
Android:将片段和弹出窗口的点击事件中生成的变量传递给活动的方法
解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段