最近在看张容铭大神的书,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);