面向对象 part7 class

类的定义

类实际上是个“特殊的函数“,就像能够定义函数表达式和函数声明一样,类语法

有两个组成部分:类表达式和类声明式

类声明

类声明没有提升

静态方法

只有构造函数名可以调用,实例无法使用。常用于应用程序创建工具函数

静态与原型包装中this

一个对象调用静态或原型方法时,如果该对象没有“this”值(或“this”作为布尔,字符串,数字,未定义或null) ,那么“this”值在被调用的函数内部将为 undefined

class Animal { 
  speak() {
    return this;
  }
  static eat() {
    return this;
  }
}

let obj = new Animal();
obj.speak(); // Animal {}
let speak = obj.speak;
speak(); // undefined

Animal.eat() // class Animal
let eat = Animal.eat;
eat(); // undefined

如果我们使用传统的基于函数的类来编写上述代码,那么基于调用该函数的“this”值将发生自动装箱。

function Animal() { }

Animal.prototype.speak = function() {
  return this;
}

Animal.eat = function() {
  return this;
}

let obj = new Animal();
let speak = obj.speak;
speak(); // global object

let eat = Animal.eat;
eat(); // global object

使用 extends 创建子类

extends 关键字在类声明或类表达式中用于创建一个类作为另一个类的一个子类。

super 关键字用于调用对象的父对象上的函数

上一篇:JavaScript中的map()函数


下一篇:Java多态性