关于观察者模式和apply 还有 call 的深入研究
来源:互联网 发布:ip2780清零软件 编辑:程序博客网 时间:2024/06/05 13:22
首先应该是这个Call 和 apply
看了很多网上的解释都是什么改变作用域
call(obj,[[args1],args2])apply 只不过
传递的参数不一样而已啦,剩下都是一个逻辑,更改this指针的指向,所以就有人用来做继承,也就是在子类进行继承的时候要更改一下this指向,将函数或者
属性进行一些早期绑定。
不知道是我脑子不好使还是网上写的不够全面,fn.someFunction.apply(someObj,argumentsArray) 这里大家没有发现一个问题,如果我们用的是
数组的一些方法,但是传递进去是一个Object的话 就会报错啊,所以这两个东西更改指向倒是没有什么事情,但是呢,更改的对象和你要应用某个对象的方法是同一个对象类型
说起来很绕啊
Array.prototype.shift.apply(Object)typeof Object === typeof Array;//上面的这个判定很显然不成立吧,所以一个Object是不能用array的方法的!
OK 这个问题觉得应该说完了,具体别人写的很多啦
来吧 观察者模式,什么是观察者模式呢,就是订阅方法并且储存,然后统一通知调用
上个代码吧
var CustomEvent = function(){var Event = {Queen:{},listen:function(type,fn){if(typeof this.Queen[type] === "undefined"){this.Queen[type] = []; }this.Queen[type].push(fn);return this;},trigger:function(){//arguments is a likeArray Objectvar key = [].shift.apply(arguments),fns = this.Queen[key];if(!fns || fns.length === 0){return false;}for(var i = 0;i < fns.length;i++){fns[i].apply(this,arguments);}return this;},remove:function(type,fn){fns = this.Queen[type];if(!fns){return false;}if(!fn){fns.length = 0;}for(var i = fns.length -1,_fn = fns[l];i >= 0;i--){if(_fn === fn){fns.splice(l,1);}}return this;},};return Event;}
这个就是实现观察者模式的一段代码,具体就是接受一堆key -> value 对 然后装在队列里面
0 0
- 关于观察者模式和apply 还有 call 的深入研究
- 关于call()和apply()还有bind()的用法,自己写写记得更深!!
- call和apply的深入理解
- 关于javascript的apply和call函数
- 关于javascript的apply和call函数
- 关于javascript的apply和call函数
- 关于call和apply的区别
- 关于call和apply的使用
- 关于.call和.apply的区别
- 关于 apply,call 和 bind 的理解
- 关于apply和call的一点记录
- 【JavaScript】中的call 和apply的用途以及区别研究
- 关于call和apply函数
- 10.JavaScript深入之call和apply的模拟实现
- 深入JavaScript(apply和call函数)
- Javascript:apply()和call()方法深入理解
- 深入理解call,apply和bind
- 关于javascript中call和apply的用法
- java数据结构----B树
- 欧拉函数问题
- 一个有趣的二维码生成库Qart
- 对称方阵
- 详解Android中回调机制与RecyclerView的Item点击事件实现
- 关于观察者模式和apply 还有 call 的深入研究
- 建造者模式介绍
- MATLAB数据精度处理
- 死锁问题
- spring声明式事务管理(基于注解)
- 个人记录-LeetCode 67. Add Binary
- 2016年秋-网络程序设计 学习总结
- lua中assert的作用
- Opencv ,contour moments