文档章节

如何学习别人的代码

佣兵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
广州
私信 提问
解决问题的能力和个人学习能力总结。

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

舒龙虎
2018/08/07
0
0
C语言看的懂代码,做不出题?写不出代码?,编不出项目?

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

编程大亨
2017/12/07
0
0
投稿005期 | 如何做你自己技术上的老师

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

Noahlam
2018/06/30
0
0
12 个有效的提高编程技能的方法

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

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

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

2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql rpm安装

http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.23-1.el6.x86_64.rpm-bundle.tar

梁语风
12分钟前
0
0
vue项目调微信的支付问题总揽

1、url授权 https://blog.csdn.net/sqz635262108/article/details/79208798 2、支付页面的路由必须是授权域名下的直属路由 3、ios手机端在微信浏览器上只会记录首次进入的页面的额url,所以再...

Js_Mei
13分钟前
0
0
vscode 无法安装golang.org安装包的问题

一、问题 今天在安装vscode时,报错 github.com/ramya-rao-a/go-outline (download)Fetching https://golang.org/x/tools/go/buildutil?go-get=1https fetch failed: Get https://golang.......

徐曙辉
17分钟前
0
0
Git合并不同url的项目

本文由云+社区发表 作者:工程师小熊 摘要:为了让项目能实现Git+Gerrit+Jenkin的持续集成,我们把项目从Git上迁移到了Gerrit上,发现有的同事在老Git提交代码,因为Gerrit做了同步,在Gerri...

腾讯云加社区
20分钟前
0
0
Oracle学习日志-7(聚合查询)

GROUP BY子句: GROUP BY可以对表进行分割。比如把下面的表按照商品种类进行分割,并列出该商品种类下有多少商品 SQL代码如下 SELECT product_type ,COUNT(*)FROM ProductGROUP BY produc...

白话
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部