JavaScript中的类与其他语言有何不同

## 文章结构:

一 js语言特点
二 js的类
三 js实现继承

一 js是一个基于面向对象的单线程的脚本语言

JavaScript集成了许多其他语言的精华,其中就有面向对象(类 实例对象 继承 封装 多态)
JavaScript之所以是基于面向对象,而不是面向对象,是因为它跟面向对象用法一样,但底层思想是原型的思想
因此,ES6为了更像面向对象语言的语法特征,就提出了class的用法

二 js的类
1,声明类
class Person{
	constructor(arg1,arg2){
		this.age=arg1;		//为Person类创建的对象添加成员
		this.arg2=arg2;
		this.life=1;
	}
	say(){}			//创建的对象的原型对象上添加的方法
	static a=10			//静态属性
	static eat(){}		//静态方法
	b=12			//直接在Person类创建的对象上添加属性
}
var p1=new Person(1,2)
console.log(Person.a)		//访问静态属性 10
console.log(typeof p1)		//object

constructor是官方提供,必须写这个单词,可以不写,系统会默认内置一个空的constructor
p1在创建时,constructor函数就会运行,constructor内部的this.age是为用Person类创建的对象p1添加成员,该成员的值在这里为传递进来的参数1

static为class添加静态方法和属性

什么叫静态方法?
-只能由class访问的方法,即本例中只能由Person.eat访问静态方法,Person.a访问静态属性

2,匿名类
 var Person2=class{}
 var f1=new fn()
// console.log(f1)
当class内部没有constructor时
class Child{
	可以不写,系统会默认内置一个空的constructor
}
var p1=new Child()

js没有类 是原型的思想设计的类,但是学习和使用这个技术时,心中要用类的思想学习
js的类本质是一个函数,但是不能像使用函数一样使用类,比如在类{}中写for循环等

三,继承
class Person{
	life=1
}
class Student extends Person{
constructor(arg){
super(arg)		//让其student类创建出的对象的功能有Person类的功能
}}
要实现继承的功能,super(arg)相当于在堆内存中开辟出一块堆内存,其上有Person类的所有功能,在其基础上实现Student类,从而达到继承的效果,所有super(arg)要放在constructor函数体内的第一行

若没有super,则会报错:

即:Must call super constructor in derived class before accessing 'this' or returning from derived constructor----必须调用超级构造函数在派生类访问'这个'或从派生构造函数返回之前
posted @ 2022-07-13 20:03  徐啊伟  阅读(109)  评论(0)    收藏  举报