前端笔记ES6JavaScript 极简教程 ES6 ES7

ES语法总结(第三部分)

2018-09-25  本文已影响5人  六个周

程序中类

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'
}

注意:

  1. ES6里面class没有提升功能,在ES5,用函数模拟可以,默认函数提升
  2. 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');

========================================

上一篇下一篇

猜你喜欢

热点阅读