ES6总结及使用(3)

class类

ES6提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
知识点:
1) class 声明类
2)constructor 定义构造函数初始化
3)extends 继承父类
4)super 调用父级构造方法
5) static 定义静态方法和属性
6)父类方法可以重写

es5通过构造函数实例化对象
//手机类
function Phone(brand,price){
	this.brand = brand;
	this.price = price;
					
}
//添加方法
Phone.prototype.call = function(){
	console.log("我可以打电话!");
}
//实例化对象
let Huawei = new Phone('华为',5999);
Huawei.call();//我可以打电话!
console.log(Huawei); //Phone {brand: "1+", price: 1999}
es6(class语法实现上面的功能)
class Phone{
	//构造方法 名字不能修改
	constructor(brand,price) {
		this.brand = brand;
		this.price = price;
	}
					
	//方法必须使用该语法,不能使用es5的对象完整形式
	call(){
		console.log("我可以打电话!");
	}
}
				
let onePlus = new Phone("1+",1999);
console.log(onePlus);//Phone {brand: "1+", price: 1999} */

es6静态成员

class Phone{
	static name = '手机';
	static change(){
		console.log("我可以改变世界!");
	}
}
let nokia = new Phone();
console.log(Phone.name);//手机
console.log(nokia.name);//undifined */
// static属于类而不属于实例对象

对象继承

es5构造函数实现
function Phone(brand,price){
	this.brand = brand;
	this.price = price;
}
Phone.prototype.call = function(){
console.log("我可以打电话!");
}
//智能手机
function SmartPhone(brand,price,color,size){
	Phone.call(this,brand,price);
	this.color = color;
	this.size = size;
}
//设置子级构造函数的原型
SmartPhone.prototype = new Phone;
SmartPhone.prototype.constructor = SmartPhone;//做一个校正
//声明子类的方法
SmartPhone.prototype.photo = function(){
	console.log("我可以拍照");
}
SmartPhone.prototype.playGame = function(){
	console.log("我可以玩游戏");
}
					
const Huawei = new SmartPhone('华为',2499,'black','5.5inch');
					
console.log(Huawei);
//SmartPhone {brand: "华为", price: 2499, color: "black", size: "5.5inch"} 
es6构造函数
class Phone{
	//构造方法
	constructor(brand,price) {
		this.brand = brand;
		this.price = price;
	}
	//父类的成员属性
	call(){
		console.log("我可以打电话");
	}
}
					
class SmartPhone extends Phone{
	//构造方法
	constructor(brand,price,color,size) {
		super(brand,price);//Phone.call(this,brand,price)一样
		this.color = color;
		this.size = size;
	}
	photo(){
		console.log("我可以拍照");
	}
	playGame(){
		console.log("我可以打游戏");
	}
	//子类重写call方法,但是需要注意的是这里的子类是不可直接调用父类的同名call方法的
	call(){
		console.log("我可以进行视频通话");
	}
}
					
const xiaomi = new SmartPhone('小米',1499,'white','4.7inch');
console.log(xiaomi);
//SmartPhone {brand: "小米", price: 1499, color: "white", size: "4.7inch"}
xiaomi.call();
//我可以打电话 如果子类对call方法进行了重写那么调用的就是子类的call方法,此时输出的内容为“我可以进行视频通话”
xiaomi.photo();//我可以拍照
xiaomi.playGame();//我可以打游戏

class的get(属性的获取)和set(属性的设置)

class Phone{
	get price(){
		console.log("价格被读取了");
		return 'i love it';//函数的返回值就是属性的值
	}
					
	set price(newVal){
		console.log('价格属性被修改了');
	}
}
//实例化对象
let s = new Phone();
// console.log(s.price);//价格被读取了 i love it
s.price = 'free';//价格属性被修改了 

数值扩展

0、Number.EPSILON是JavaScript表示的最小精度
EPSILON 属性的值接近于2.2204460492503130808472633361816E-16

console.log(0.1+0.2);//0.3000000000000000
console.log(0.1+0.2 == 0.3);//false
function equal(a,b){
	if(Math.abs(a-b) < Number.EPSILON){
		return true;
	}else{
		return false;
	}
}
console.log(equal(0.1+0.2,0.3));//true 

1、二进制到十六进制

let b = 0b1010;//二进制
let o = 0o777;//八进制
let d = 100;//十进制
let x = 0xff;//十六进制

2、 Number.isFinite 检测一个数值是否为有限数

console.log(Number.isFinite(100));//true
console.log(Number.isFinite(100/0));//false
console.log(Number.isFinite(Infinity));//false

3、Number.isNaN 检测一个数值是否为NaN

 console.log(Number.isNaN(123));//false

4、 Number.parseInt Number.parseFloat 字符串转整数
/* console.log(Number.parseInt(‘5211314love’));//5211314
console.log(Number.parseFloat(‘3.1415926love’));//3.1415926 */

5、Number.isInteger 判断一个数是否为整数

console.log(Number.isInteger(5));//true
console.log(Number.isInteger(2.5));//false

6、Math.trunc 将数字的小数部分抹掉

console.log(Math.trunc(3.5));//3

7、Math.sign 判断一个数到底为正数负数还是零

console.log(Math.sign(100));//1
console.log(Math.sign(0));//0
console.log(Math.sign(-200));//-1 

对象的方法扩展

1、object.is 判断两个值是否完全相等

console.log(Object.is(120,110));//false
console.log(Object.is(120,120));//true
//和===很像,但又有不同,比如NaN
console.log(Object.is(NaN,NaN));//true
console.log(NaN === NaN);//false 

2、object.assign对象的合并

const config1 = {
	host:'locahost',
	port:8080,
	name:'root',
	pass:'root',
	test:'test'
}
const config2 = {
	host:'http://buxian.com',
	port:8086,
	name:'buxian.com',
	pass:'buxina',
	test2:'test2'
} 
console.log(Object.assign(config1,config2));
//{host: "http://buxian.com", port: 8086, name: "buxian.com", pass: "buxina"} 后面的覆盖前面的
	/* host: "http://buxian.com"
	name: "buxian.com"
	pass: "buxina"
	port: 8086
	test: "test"
	test2: "test2"  如果是一方没有的将不会覆盖*/

3、object.setPrototypeOf 设置原型对象 object.getPrototypeof 获取原型

const person = {
	name:'buxian'
}
const cities = {
	like:['成都','杭州','深圳']
}
Object.setPrototypeOf(person,cities);
console.log(person);
/* {name: "buxian"}
	name: "buxian"
	__proto__:
	like: (3) ["成都", "杭州", "深圳"]
	__proto__: Object */
console.log(Object.getPrototypeOf(person));
/* {like: Array(3)}
	like: (3) ["成都", "杭州", "深圳"]
	__proto__: Object */

模块化

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。

1、模块化的好处

模块化的优势有以下几点:
1)防止命名冲突
2)代码复用
3)高维护性

2、模块功能主要由两个命令构成:export和 import。

export命令用于规定模块的对外接口
import命令用于输入其他模块提供的功能

模块数据使用(暴露)

将下面的代码单独放到一个m1.js文件中
分别暴露

export let person = 'buxian';
export function like(){
	console.log("喜欢的颜色有很多!");
} 

将下面的代码单独放到一个m2.js文件中
统一暴露

person = 'buxian';
export function like(){
	console.log("喜欢的颜色有很多!");
}
export {person,like}; 

将下面的代码单独放到一个m3.js文件中
默认暴露

export default{
	name:'buxian',
	change: function(){
		console.log("我可以改变!");
	}
} 
<script type = "module">
	//1、通用导入方式
		//引入m1.js模块内容
		import * as m1 from 'm1.js';
		//引入m2.js模块内容
		import * as m2 from 'm2.js';
		//引入m3.js模块内容
		import * as m3 from 'm3.js';
		m3.default.change();//可以改变!
		
	//2、结构赋值形式
		import{person,like} from "m1.js";
		console.log(person);//buxian
		console.log(like);
		f like() {
			console.log("喜欢的颜色有很多!");
		} 
	
		import{person as person1,like as like1} from "m2.js";//重名报错,此处使用别名
		import {default as m3} from 'm3.js';
		console.log(m3);//{name:"buxian",change:f}
		
	//3、简便形式 针对默认暴露
		import m3 from "m3.js";
</script>

es6模块化代码在项目中的使用方式
1.安装工具 babel-cli babel-preset-env browserify(webpack)
2. npx babel src/js -d dist/js
3.打包 npx browserify dist/js/app.js -o dist/bundle.js

文件引入

<script src="dist/bundle,js" type="text/javascript" charset="utf-8"></script> 

入口文件引入 将上述所有引用放入app.js

<script src="app.js" type="module"></script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值