Class类

Class
作用:定义一个类
语法:
class 类名{} 等同于 class 类名{constructor(){}}
ES5定义构造函数function Point(){}
constructor方法的作用:相当于ES5的构造函数Point函数的作用

例:class Father{}
Father是一个函数,当new调用Father函数时,立即调用constructor函数(this指向实例),定义类时默认有一个constructor

使用:通过new来调用类,可以实例化一个对象
const p = new 类名()

定义实例属性/方法
class Point{
constructor(name){
this.name = name
this.eat = function(){
return 'eat'
}
}
hobby = '跳舞'
eat2(){
return 'eat2'
}
get prop(){
return 'prop'
}
set prop(value){
console.log(set+'value')
}
}

定义静态属性/方法(注:静态方法中的this指向的是类而不是实例)
class Father{
static see(){
return 'see'
}
static text = 'hello world'
}

继承:(一个子类可以继承父类的所有方法和属性)
class Child extends Father{} 等同于 class Child extends Father{constructor(){super()}}
必须调用super方法来得到与父类同样的属性和方法,再定义子类自己的属性和方法

super的使用:
super作函数使用,代表父类的构造函数,super在调用时this指向子类
super作对象使用,在普通方法中,指向父类的显示原型对象;在静态方法中,指向父类

与ES5定义构造函数的区别:
只是定义构造函数的语法不同,ES6中Class定义类算是ES5定义构造函数的语法糖
与真正的面向对象编程的语言的区别:
Class定义类只是语法上的面向对象,实际上并不是采用的面向对象的思想,与ES5来定义构造函数,实例化对象的思想完全相同,只是写法更简洁

返回值的问题:
函数普通调用默认返回的是undefined
new 调用默认的返回值是this,this指向实例对象(constructor方法调用的返回值是this,this指向实例对象)
对象中的属性分为访问描述符(get/set)和数据描述符

你可能感兴趣的:(Class类)