var proxy = new Proxy(target, handler);
// new Proxy() 生成一个Proxy实例
// target 表示所要拦截的目标对象
// handler 一个对象,表示用来定制拦截行为
var person = {
name: 'yizihan'
}
var proxy = new Proxy(person, {
// 重写 (.)方法
get: function (target, property) {
if(property in target) {
return target[property];
} else {
return new ReferenceError("Property '"+ property + "' does not exist.")
}
}
})
var obj = Object.create(proxy);
obj.name; // yizihan
obj.age; // ReferenceError: Property 'age' does not exist.
代理模式 - Proxy Pattern
当一个昂贵的对象应被实例化时,Proxy模式可以帮助我们对其进行控制,提供高级的方法来引用对象,或修改对象,让它在特定的上下文中以一种特殊方式发挥作用。
jQuery.proxy() 接受函数作为参数,并返回一个始终具有特定上下文的新对象。这确保了函数中this的值是我们所需要的值。
实例需求:按钮点击之后延迟添加类名。
ES6 - Proxy
Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,属于一种“元编程”,即对编程语言进行编程。
Proxy是在目标对象架设一层“拦截”,外界对该对象的访问,都必须先通过这层“拦截”,而这层“拦截”可以对外界的访问进行过滤和改写。
通过
new Proxy()
代理目标对象,目标对象内部的this
会指向Proxy代理。混入 - Mixin Pattern
在一个对象之中混入另外一个对象的方法。
首先设定Mixin包含的方法属性,然后利用原型链继承,从Mixin中继承到子类。
传统继承方式
Mixin方式
Mixin 有助于减少系统中的重复功能代码及增加函数的复用。
ES6方式
装饰者模式 - Decorator Pattern
Decorator 提供了将行为动态添加至系统的现有类的能力
优点:对象可以被新行为包装,然后可以继续被使用,而不必担心被修改的基本对象。这种模式使我们不必依靠大量的子类来获得同样的实现。
ES6 - Decorator
修饰器是一个对类进行处理的函数,修饰器函数的第一个参数,就是所要修饰的目标类。
带参数的修饰器
方法的修饰
修饰器不仅可以修饰类,还可以修饰类的属性。