ES语法总结(第三部分)
程序中类
ES6
面向对象 ,类
属性
方法
函数模拟
人: Person
属性: name
展示名字: showName
Person.prototype.showName
ES5之前:
function Person(){
this.name='aaa';
}
Person.prototype.showName=function(){}
ES6中变形:
class Person{
constructor(){
this.name = 'aaa';
}
showName(){
}
}
--------------------------
const Person = class{}
------------------------------
let a = 'strive';
let b = 'method';
class Person{
[a+b](){
}
}
let aaa='aaa';
let bbb='ddd';
let json={
[aaa+bbb]:'welcome 51mmr.net'
}
注意:
- ES6里面class没有提升功能,在ES5,用函数模拟可以,默认函数提升
- ES6里面this 比之前轻松多了
矫正this:
1. fn.call(this指向谁, args1, args2....)
2. fn.apply(this指向谁, [args1, args2....])
3. fn.bind()
class里面取值函数(getter), 存值函数(setter)
静态方法: 就是类身上方法
static aaa(){
}
父类.aaa();
父类
子类
继承:
之前:
Person
Student
现在: extends
class Student extends Person{
}
拖拽
Proxy 和Reflect
ES2018(ES9)
proxy: 代理
扩展(增强)对象、方法(函数)一些功能
比如:
Vue
Vue.config.keyCodes.enter=65
Proxy作用: 比如vue中拦截
预警、上报、扩展功能、统计、增强对象等等
proxy是设计模式一种, 代理模式
let obj ={
name:'Strive'
};
//您访问了name
obj.name // Strive
语法:
new Proxy(target, handler);
let obj = new Proxy(被代理的对象,对代理的对象做什么操作)
handler:
{
set(){}, //设置的时候干的事情
get(){}, //获取干的事情
deleteProperty(){}, //删除
has(){} //问你有没有这个东西 ‘xxx’ in obj
apply() //调用函数处理
.....
}
实现一个,访问一个对象身上属性,默认不存在的时候给了undefined,希望如果不存在错误(警告)信息:
DOM.div()
DOM.a();
DOM.ul()
set(), 设置,拦截:
设置一个年龄,保证是整数,且范围不能超过200
deleteProperty(): 删除,拦截:
has(): 检测有没有
apply() :拦截方法
Reflect.apply(调用的函数,this指向,参数数组);
fn.call()
fn.apply() 类似
Reflect: 反射
Object.xxx 语言内部方法
Object.defineProperty
放到Reflect对象身上
通过Reflect对象身上直接拿到语言内部东西
'assign' in Object -> Reflect.has(Object, 'assign')
delete json.a -> Reflect.deleteProperty(json, 'a');
========================================