本篇来讨论为什么程序开发中推荐使用面向对象编程。
程序的执行有几种套路:顺序执行、判断执行和循环执行。我认为的程序其实就是一个个或好或差的单元组成的大单元,计算机对这个大单元进行执行计算的过程。既然这个计算有过程,那肯定就有时间消耗。写的差的程序执行时间就长,写的好的程序执行时间就短。
那怎样才能做到写出更好的程序呢?思考下日常生活,平时我们做一系列事情时,如果事情的条理性好,前后安排合理,就能顺畅的完成。这个对具体事情的合理安排,就是我们做好事情的关键所在。程序也一样,如果程序中的各个小单元能够合理安排、条理清晰、逻辑性强,那么程序执行就会更顺畅更快。这个合理优化的过程,在程序的世界中,就需要通过面向对象的方法来把一个个小单元进行合理结构化。
所以,程序执行不管使用何种套路,都应具有良好的结构化特性。面向对象其实就是把数据进行结构化。程序的编写应遵循简单抽象的总原则。
在面向对象开发中,想要做到简单抽象并不容易,拆分出来的更细粒度原则如下:
五大设计原则:
使用Promise
来说明原则 S&O
,如果对Promise
还不清晰的,可以戳这先回顾:
1var imgSrc = 'http://jspang.com/static/upload/20181213/pvA-e9vkrNiXVFUm6xXMO9zf.jpg'; //此处感谢jspang.com网站提供图片,借用
2function loadImg(src){
3 return new Promise(function(resolve, reject){
4 console.log('promise被new后立即执行的结果'); //小知识点:Promise一new就会立即执行
5 var img = document.createElement('img');
6 img.onload = function(){
7 resolve(img);
8 }
9 img.error = function(){
10 reject('图片加载失败')
11 }
12 img.src = src;
13 })
14}
15var res = loadImg(imgSrc);
16res.then(function(img){
17 //resolve
18 console.log(img.width);
19 document.body.appendChild(img);
20}).then(function(){
21 //resolve
22 console.log('这里是当新增需求时扩展的业务代码,新增个then即可');
23}).catch(function(err){
24 //上面所有then的报错都会被此处catch
25 console.log(err);
26})
27/*
28补充知识点:Promise被new后的值的then()方法中有两个回调函数作为参数,分别是resolve和reject,它们接收new过程中resolve和reject参数传递出来的值,对应的未完成-成功和未完成-失败两种状态,但通常then()方法只使用第一个参数
29即resolve回调,而将所有的错误统一由catch()方法捕获即可,这样能在多个then()链式调用睦,都能保证捕获而不用一个个在then()方法中添加reject回调。至于then()能链式调用,是因为then()方法返回的也是一个promise对象
30*/
上例说明:
then
中的逻辑只做好一件事then()
扩展即可,因为then()
返回一个新的promise对象,所以可以链式调用,并且catch()
方法也返回一个新的promise对象,所以后面也可以接新的then()