来自昆仑山,真名陆离。
2021年05月
2021年03月
2021年02月
2021年01月
镜像站正在升级中,敬请期待!
不可以直接调用数组自身的toString()方法,因为返回的会是内容的字符串,只有对象的toString方法会返回对象的类型。所以我们需要“借用”对象的toString方法,需要使用call或者apply方法来改变toString方法的执行上下文。
const a = ['Hello','Howard'];
Object.prototype.toString.call(a);//"[object Array]"
instanceof 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。语法
object instanceof constructor
所以如果这个Object的原型链上能够找到Array构造函数的话,那么这个Object应该及就是一个数组,反之则不是
const a = [];
console.log(a instanceof Array);//true
观察者模式中主体和观察者还是存在一定的耦合性,而发布订阅者模式中,在主体与观察者之间引入消息调度中心,所有的消息传递过程都通过消息调度中心完成,也就是说具体的业务逻辑代码将会是在消息调度中心内,而主体和观察者之间实现了完全的松耦合,与此同时带来的问题就是,程序的可读性降低了。
观察者模式也是定义对象间的一种一对多依赖关系,使得当每一个被依赖对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。它的目标与发布-订阅者模式是一致的。 被观察对象通过 subscribe 方法和 unsubscribe 方法添加和删除一个观察者,通过 broadcast 方法向观察者推送消息。
document.body.addEventListener('click', ()=>{}};
上面的例子就是一个最简单的观察者模式。document.body 在这里就是一个被观察对象, 全局对象是观察者,当 click 事件触发的时候,观察者会调用 clickHandler 方法。
发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。 订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Event Channel),当发布者(Publisher)发布该事件(Publish Event)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。 例子:Vue的EventBus
定义:通过一个中介者对象,其他所有的相关对象都通过该中介者对象来通信,而不是相互引用,当其中的一个对象发生改变时,只需要通知中介者对象即可。通过中介者模式可以解除对象与对象之间的紧耦合关系。
定义:为一个对象提供一个代用品或占位符,以便控制对它的访问。
常用的虚拟代理形式:某一个花销很大的操作,可以通过虚拟代理的方式延迟到这种需要它的时候才去创建(例:使用虚拟代理实现图片懒加载)
定义:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。
策略模式的目的就是将算法的使用算法的实现分离开来。
/*策略类*/
var levelOBJ = {
"A": function(money) {
return money * 4;
},
"B" : function(money) {
return money * 3;
},
"C" : function(money) {
return money * 2;
}
};
/*环境类*/
var calculateBouns =function(level,money) {
return levelOBJ[level](money);
};
console.log(calculateBouns('A',10000)); // 40000