文档章节

如何学习别人的代码

佣兵0926
 佣兵0926
发布于 2015/12/02 11:25
字数 759
阅读 493
收藏 4

学习的时候通常会遇到如下阻力:

1、代码量巨大,代码气场首先就把人吓退了

2、各种没有使用过的,或者很少使用的,生疏的js方法,又是一个下马威

3、各种代码书写技巧!

判断语句不用if else,用逻辑运算符,闭包不用

(function(){
	//......
})()

!function
+function

4、各种健壮性判断

5、浏览器兼容性处理

6、为方便扩展或使用,使用了一些规范和模式,比如模块化、面向对象方法等

这些阻力,每一个单独让一个入门者去应对,其实都不是多难的事。

但是当他们一起向一个初级水平的人袭来时,往往给人积极性的打击是较大的。

最重要的是,这些阻力容易埋没一个牛逼交互的核心原理,

一个牛逼交互的核心原理往往与这些实际细节无关

一个交互如果没有真正掌握原理就非常容易忘,就容易出了bug无处找原因。所以,学习他人优秀代码时,要注意有意识忽略那些阻力,因为那些阻力其实不是真正的核心和难点

具体做法就是,参考源码,用自己的代码实现一次交互,在具体书写过程中完全不考虑那些问题,不管任何规范,只要能看到效果,怎么方便怎么来。关注代码的目的,而不是实现细节

举个例子

源码获取一个dom,可能会专门写一个方法,形如:

//获取ID
var $ = function (id) {return typeof id === "string" ? document.getElementById(id) : id};
//获取tagName
var $$ = function (tagName, oParent) {return (oParent || document).getElementsByTagName(tagName)};

事实上,如果被操作dom有绑定id,你在js中是可以直接就用的,不用再单独去写方法获取,比如html是这样:

<div id="box">...</div>

在js中就可以直接用起:

box.innerHTML = 'xxoo';

你的目的是获取dom元素,那么你只要能获取到就行,用最简单粗暴的方法,不去考虑其他,因为这不是你的重点和目标,你的目标是整个插件的原理,不要让代码细节阻碍你

实现的代码可能会非常粗陋不堪,甚至只能在你的指定浏览器的指定版本里正常显示,但是它会更突出原理,突出你要学习的重点

掌握了原理,剩下那些问题,都是你可以各个击破,逐步迭代去优化的,都是百度可以轻易找到解决方法的

强调一下:这里所说的方法,是学习方法,不是工作方法和生产方法,实际工作中,一定要尽量规范,考虑全面,否则一定焦头烂额

© 著作权归作者所有

共有 人打赏支持
佣兵0926
粉丝 4
博文 56
码字总数 28941
作品 0
广州
私信 提问
解决问题的能力和个人学习能力总结。

赤裸裸的现实我是一个前端开发,最近碰到很多新人,或多或少都抱着这样的期待:在工作中能遇到个天使般的老师,能够悉心的指导你,帮你解决你所遇到的难题, 最好还能帮你系统性的帮你讲解一...

舒龙虎
08/07
0
0
投稿005期 | 如何做你自己技术上的老师

赤裸裸的现实 我是一个前端开发,最近碰到很多新人,或多或少都抱着这样的期待:在工作中能遇到个天使般的老师,能够悉心的指导你,帮你解决你所遇到的难题, 最好还能帮你系统性的帮你讲解一...

Noahlam
06/30
0
0
C语言看的懂代码,做不出题?写不出代码?,编不出项目?

  为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?   前言      我看得懂别人的程序,可是我自己却写不出来,我应该怎么办啊?   你了解这些嘛?      你只是能...

编程大亨
2017/12/07
0
0
12 个有效的提高编程技能的方法

1. 永远不要停止学习和阅读 阅读 书籍,而不只是网站 阅读 只为自我提升,而不是为了下一个项目 阅读 提升你的基础,而不只是最新技术 2. 跟比你聪明的人一起工作 跟比你更聪明的人或者是更有...

oschina
2012/05/11
13.8K
58
如何学习Java

Java改如何学习,不少大学里面的大学生都是学过Java的,但是他们学习的都是些在Java门口的东西,根本没有深入Java之中去,更谈不上学习好Java了,这里为大家详细介绍下如何学习Java。 购买职...

2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2135亿背后,你所不知道的那些阿里瞬间

摘要: 01 10日下午五点。 上海梅赛德斯奔驰文化中心,天猫双11前夜的“猫晚”就在离我100米的地方。 台上正彩排,鲜衣怒马,烈焰繁花。但走进导播车,白天和黑夜好像没有区别,但你知道吗,...

阿里云官方博客
40分钟前
1
0
叶曼音频

道德经 道德经01a 道德经01b

亚林瓜子
48分钟前
1
0
Go 使用channel控制并发

前言 channel一般用于协程之间的通信,channel也可以用于并发控制。比如主协程启动N个子协程,主协程等待所有子协程退出后再继续后续流程,这种场景下channel也可轻易实现。 场景示例 总结 ...

恋恋美食
今天
3
0
斐波那契堆的理解,节点mark属性和势函数

斐波那契堆 看了好多博客,都是照搬算法导论的内容,没有自己的理解,比如为什么有mark属性,势函数的作用,以及为什么叫斐波那契堆,下面说说鄙人的理解。 势函数 势函数是根节点个数加上2...

杨喆
今天
7
0
NIO源码详解

阻塞io和无阻塞io: 阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒 ...

沉稳2018
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部