最近在看張容銘大神的書,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);