专栏首页mySouljs 中的class
原创

js 中的class

js 的class

由于存在转换器这种神器,所以代码能直接转换为es5,用es6的语法写。

一些解释

js的class仅仅为一个语法糖,是在原先构造函数的基础上出现的class,仅仅如此。所以使用构造函数构造类,或者使用class语法糖构造类都是相同的。具体还是使用prototype和this来进行模拟类。

重点在于构造函数,使用的是构造函数来模拟类。

类声明

需要声明一个类,需要使用class

class Rectangle {
	constructor(height, width) {
		this.height = height;
		this.width = width;
	}
}

和函数声明的最大的区别在于,类声明,不会出现声明提前,函数声明会出现声明提前,这是两者最大的区别。

在上方中,声明类以后,新建一个对象。

let rectAngle = new Rectangle

该对象具有constructor方法。

匿名类

和匿名函数类似,类依旧可以进行匿名声明

let Rectangle = class {
	constructor(height, width) {
		this.height = height;
		this.width = width;
	}
}

在类表达式中,同样会出现类声明提升的问题。

constructor

为一个构造函数,用于初始化class并创建一个对象

即为原先学习的构造函数,函数为对象,对象为函数。

class Rectangle {
	// 构造函数
	constructor(height, width) {
		this.height = height;
		this.width = width;
	};
	// get 方法即调用将会返回的值
	get area() {
		return this.calcArea();
	};
	// 定义calcArea函数
	calcArea() {
		return this.height * this.width;
	}
}

上方定义了一个类如果需要使用

const square = new Rectangle();
console.log(square.area);

即可完成对类的使用。

static

为一个静态方法,该静态new出的来的对象不能进行使用。

常常用于工具函数的书写

class Point {
	constructor(x, y){
		this.x = x;
		this.y = y;
	};

	static distance(a, b){
		const dx = a.x - b.x;
		const dy = a.y - b.y;
		return Math.hypot(dx, dy);	// 毕达哥拉斯定理
	}
}
// 使用
const p1 = new Point(5,5);
const p2 = new Point(10,10);
console.log(Point.distance(p1,p2));

关于严格模式

由于js存在严格模式,并且上面的内容在严格模式下执行,如果该对象没有this的值,将不会返回其本身。

传统的使用prototype将会返回其本身,因为传统的不在严格模式下执行。

extends

使用extends创建子类

class Animal {
	constructor(name) {
		this.name = name;
	}

	speak() {	// 由于是在类中定义,function关键字可以省去
		console.log(this.name);
	}
}
// 创建DOg父类
class Dog extends Animal {
	speak() {
		console.log(this.name);
	}
}

let d = new Dog();
d.name = "ming"
d.speak();

类不可继承没有构造函数的对象

如果一个对象没有构造函数,将不能进行继承。

请使用

Object.create()

进行创建给予对象的新对象

const a = {

};

const b = Object.create(a);	// 创建基于原型a的对象

super

使用super调用超类

class Cat {
	constructor(name) {
		this.name = name;
	}

	speak() {
		console.log();
	};
}  

class Lion extends Cat {
	speak() {
		super.speak();
	}
}

即使用super调用超类

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java面试之Java基础知识第一季

    因为这个方法是Java程序的入口方法,JVM在运行程序的时候,会先查找main方法,其中public是权限修饰符,表明任何类和对象都可以访问这个方法,stati...

    mySoul
  • Node 连接mysql数据库

    github地址 https://github.com/jxcore/jxcore

    mySoul
  • css3过渡

    transition 为一个简写属性,是一个transition-property (定义过渡的属性的名称)以及 transition-duration (定义...

    mySoul
  • 快速学习ES6新特性-class(类)的基本语法

    JavaScript 语言的传统方法是通过构造函数定义井生成新对象。ES6中引入了class的概念,通过class关键字自定义类。

    cwl_java
  • 前端开发: Vue封装复用思想的运用(其一)

    在编程开发过程中,封装思想很重要,涵盖整个方面无死角;如果是在前端开发的时候,组件封装也是必备思想,而且组件的复用深入人心,既方便开发维护,也可大大提高开发进度...

    三掌柜
  • uni-app实图片和视频上传

    使用uni-app实现点击上传,既可以上传视频,有可以上传图片,图片预览,删除图片和视频功能,最终效果如下。uni-app里面没有提供同时上传视频和图片这个插件...

    小周sri的码农
  • 如何生成自己的Yaas Service yaas

    mvn archetype:generate -DarchetypeArtifactId=jersey-spring-archetype -Darchetype...

    Jerry Wang
  • spring 整合JMS

    (1)创建工程springjms_producer,在POM文件中引入SpringJms 、activeMQ以及单元测试相关依赖

    一点博客
  • CRM One Order 事件处理元数据初始化的准确位置

    SAPLCRM_EVENT_OW, include LCRM_EVENT_OWTOP:

    Jerry Wang
  • 每一个程序员需要了解的10个Linux命令

    以下就是今天我们要介绍的Linux命令:  man  touch, cat and less  sort and grep  cut  sed  tar  fi...

    小帅丶

扫码关注云+社区

领取腾讯云代金券