前言
- 细阅此文章大概需要 10分钟左右
- 本篇中讲述了:
-
- 单例设计模式
-
- 高级单例设计模式【基于闭包管控的单例模式】
-
- 惰性思想【函数重构】
-
- 柯理化函数思想【预处理】
-
- compose函数【聚合/组合函数扁平化】
- 如果有任何问题都可以留言给我,我看到了就会回复,如果我解决不了也可以一起探讨、学习。如果认为有任何错误都还请您不吝赐教,帮我指正,在下万分感谢。希望今后能和大家共同学习、进步。
- 下一篇会尽快更新,已经写好的文章也会在今后随着理解加深或者加入一些图解而断断续续的进行修改。
- 如果觉得这篇文章对您有帮助,还请点个赞支持一下,谢谢大家!
- 欢迎转载,注明出处即可。
JS高阶编程
JS的单例设计模式
- 【用单独的实例,来管理当前事物的相关特征】,类似于实现一个【分组】的特点,而此时实例名不仅仅叫做一个对象,也被称为命名空间,而描述当前事物的各种不同属性或方法都存放在这同一个命名空间中,两个命名空间之间相同属性不会冲突
- 【A和B是两个人,虽然他们都是人类,但是都有各自的姓名和年龄,而且他们各自有各自的特点。假如两人重名,也并不会有冲突存在,依然是各自独立的个体】
let obj1 = {
name:'xxx';
age:25,
say(){
}
};
JS的高级单例设计模式【基于闭包管控的单例模式】
- 高级单例设计模式,早期的模块划分就是以此来实现的
- 在闭包当中的方法若想在单例外使用,则可以将其暴露在对象当中,当外部调用时直接通过对象调用即可,实现方法既可以私有也可以公有
-
在闭包中把一些私有信息暴露给外部使用
- return通过返回值赋值暴露出去
- window.xxx = xxx通过将方法或变量赋值给全局对象作为属性,从而暴露出去
- 【或暴露出去【本例中是将tools方法作为一个对象的一个属性】【而这个对象被赋值给了全局上下文中的module1】【从而将tools暴露给了外面,通过对象.属性的方式来调用】module1.tools】
let module1 = (function (){
function query(){};
function tools(){};
return{
name : 'AREA',
tools
};
window.query = query;
})();
let A = (function (){
function query(){};
function fn(){};
return {
query
}
B.fn();
})();
let B = (function (){
unction query(){};
function fn(){};
function getxxx(){};
return {
getxxx
}
A.query();
})();
JS的惰性思想:【也是闭包的应用】
- 【懒】执行过一次的东西,如果执行第二次还是一样的效果,就避免他重复执行,浪费性能
- 代码上的表现就是
函数重构
function getCss(elemrnt,attr){
if('getComputedStyle' in window){
getCss = function (element,attr){
return window.getComputedStyle(element)[attr];
};
}else{
getCss = function (element,attr){
return window.getComputedStyle(element)[attr];
};
}
return getCss(element,attr);
}
getCss(document.body,'margin');
JS的柯理化函数思想:【闭包的应用】
- 利用闭包的保存机制,把一些信息预先储存下来(预处理思想)
function fn(...outerArgs){
return function anonymous(...innerArgs){
let args = outerArgs.concat(innerArgs);
return args.reduce((n,item) =>n+item);
};
}
let f = fn(20,30,40);
f(40);
f(100);
let res = fn(1,2)(3);
console.log(res);
-
回调函数:
- 把一个函数作为值传给另一个函数,在另外一个函数中把这个函数执行(是实现函数式编程的重要知识)
-
函数式编程:
- 注重结果,不在乎过程,过程交给别人处理【把如何实现封装成方法,之后只要调取API【该方法】,即可获得想要的结果】【与命令式编程的不同就是把具体过程封装成了方法,体现了函数的封装性】
-
命令式编程:
JS的compose函数【聚合/组合函数】思想:【多层嵌套函数扁平化处理】
- 把多层函数嵌套调用扁平化
- 实现一个compose函数
const fn1 = x => x + 10;
const fn2 = x => x - 10;
const fn3 = x => x * 10;
const fn4 = x => x / 10;
let res = fn4(fn2(fn3(fn1(20))));
console.log(res);
function compose(...funcs){
return function anonymous(...args){
if(funcs.length===0)return args;
if(funcs.length===1)return funcs[0](...args);
return funcs.reduce((n,item)=>{
Array.isArray(n)?item(...n):item(n);
},args);
}
}
let res1 = compose(fn1,fn3,fn2,fn4)(20);
console.log(res1);