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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章