概念: 作为创建对象的模板,通过class关键字,来定义类
语法示例:
class Point {
constructor(name,val){
this.name = name;
this.age = "18";
this.val = val;
this.setData(val);
}
eat(){
console.log(`我叫${this.name}`);
}
}
var t = new Point("李现","诸葛大力");
console.log(t.name);
t.eat();
设置和保存数据的两种写法
class Point {
constructor(name,val){
this.name = name;
this.age = "18";
this.val = val;
}
eat(){
console.log(`我叫${this.name}`);
}
// 写法一
set prop(value){
console.log(`我的值是${value}`);
}
get prop1(){
return "哈哈";
}
// 写法二
setData(value){
this.val = value;
console.log(this.val);
}
getData(){
return this.val;
}
}
var t = new Point("李现","诸葛大力");
t.prop = 1234;
console.log(t.prop);
t.setData("我是新来的");
console.log(t.getData());
属性表达式:
{
//属性表达式 就是把下边这串代码
class Person {
constructor(sex){
this.sex = sex;
this.hobby = "女"
}
shopping(){
console.log("天生会逛街")
}
}
let p = new Person();
p.shopping();
//更换为
let shopping = "shop"; //*
class Person{
constructor(sex) {
this.sex = sex;
this.hobby = "女";
}
[shopping](){ //*
console.log("一个省钱的春节");
}
}
let person = new Person();
person.shop(); //*
}
class表达式: 不常用,了解即可
{
const MyClass = class Me {
//这个区域内使用Me,出了这个区域,使用MyClass
}
}
严格模式:
- 在script标签中第一行写"use strict",表明下面的代码使用严格模式(或者是js文件中第一行)
- 使用代码的定义,使用更加规范, 避免一些诡异的运行行为
- 在后续的Es特性和一些Angular等JS框架中,要求必须在严格模式下运行
- 使代码的编译和运行更加高效
对变量的影响:
- 变量必须要先声明再使用
- 不可以使用任意保留字/关键字作为变量名
- 严格模式不再允许用户删除变量 ( delete )
对对象的影响:
- 对只读属性 赋值 会抛出异常
- 对不可配置的属性使用 delete操作符会抛出异常
- 对不可扩展的对象添加属性,会抛出异常
- 不可以使用with简化对象访问
对函数的影响:
- 在普通函数当中,不允许使用this引用当前的window对象
- 在严格模式中,函数的参数必须是唯一的(也就说不允许有重复的)
- 在严格模式中,arguments对象的值,和形参的值是完全独立的,虽然修改形参的值也会反映到arguments对象中。
注意点:
- 在ES6中,默认的就是严格模式,所以不需要使用 “use strict” 来指定运行模式
- 不存在变量提升
- 在类和模块{}的内部,默认就是严格模式,其实未来所有的代码都是运行在模块中
所以说ES6实际上把整个语言升级到了严格模式