js设计模式之访问者模式与快递

最近在看张容铭大神的书,js设计模式 ,聊聊读后感
定义:不改变操作对象的同时,为它添加新的操作方法
原理:使用call和apply使得一个对象能获得其它函数(对象)的方法并改变自身元素或访问自身元素
访问者,就像快递,不需要你移动,只需要快递来给你送东西,你家里就可以新增物品

call 和 apply
解释: 这两个是一样的东西,不同点在于,call要一个个参数传,apply可以用参数数组
如果用call打电话叫人吃饭,那就是一个个电话打过去,apply的话就是申请饭局(提出大家聚会),大家都知道了
call是打电话一个个叫,apply就是在微信群或者什么群发下,哪天有饭吃,大家都过来(在群里说一下,就行了)
作用: 改变函数的域,不止于自身,作用对象不需要有这个函数,也能使用这个函数
也就是将某函数给别人用 例如 Array.prototype.pop.apply()之类

最小值
var min=Math.min.apply(null,array);
最大值
var max=Math.max.apply(null,array);
apply的特殊用法是把参数数组拆成参数列表给对象判断

例子

let jd = (function() {
            //arguments[0] 对象
            return {
                splice: function() {
                    let args = Array.prototype.splice.call(arguments, 1);
                    return Array.prototype.splice.apply(arguments[0], args);
                },
                push: function() {
                    let len = arguments[0].length || 0;
                    let args = this.splice(arguments, 1);
                    arguments[0].length = len + arguments.length - 1;
                    return Array.prototype.push.apply(arguments[0], args);
                },
                pop: function() {
                    return Array.prototype.pop.apply(arguments[0]);
                }
            }
        })();
        let myhome = {};
        console.log(myhome);
        jd.push(myhome, 'iphone10');
        jd.push(myhome, '特斯拉汽车');
        console.log(myhome.length);
        console.log(myhome);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章