-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
341 lines (215 loc) · 11.8 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Abner的代码奇遇记</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="为了记录自己所学过的知识,同时也为了帮助需要这些知识的人们">
<meta property="og:type" content="website">
<meta property="og:title" content="Abner的代码奇遇记">
<meta property="og:url" content="http://abnergc.github.io/index.html">
<meta property="og:site_name" content="Abner的代码奇遇记">
<meta property="og:description" content="为了记录自己所学过的知识,同时也为了帮助需要这些知识的人们">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Abner的代码奇遇记">
<meta name="twitter:description" content="为了记录自己所学过的知识,同时也为了帮助需要这些知识的人们">
<link rel="alternative" href="/atom.xml" title="Abner的代码奇遇记" type="application/atom+xml">
<link rel="icon" href="/favicon.png">
<link rel="stylesheet" href="/css/style.css" type="text/css">
</head>
<body>
<div id="container">
<div class="left-col">
<div class="overlay"></div>
<div class="intrude-less">
<header id="header" class="inner">
<a href="/" class="profilepic">
<img lazy-src="/img/self.JPG" class="js-avatar">
</a>
<hgroup>
<h1 class="header-author"><a href="/">Abner</a></h1>
</hgroup>
<p class="header-subtitle">一个90后的双鱼座文艺IT青年</p>
<div class="switch-btn">
<div class="icon">
<div class="icon-ctn">
<div class="icon-wrap icon-house" data-idx="0">
<div class="birdhouse"></div>
<div class="birdhouse_holes"></div>
</div>
<div class="icon-wrap icon-ribbon hide" data-idx="1">
<div class="ribbon"></div>
</div>
<div class="icon-wrap icon-me hide" data-idx="3">
<div class="user"></div>
<div class="shoulder"></div>
</div>
</div>
</div>
<div class="tips-box hide">
<div class="tips-arrow"></div>
<ul class="tips-inner">
<li>菜单</li>
<li>标签</li>
<li>关于我</li>
</ul>
</div>
</div>
<div class="switch-area">
<div class="switch-wrap">
<section class="switch-part switch-part1">
<nav class="header-menu">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/archives">所有文章</a></li>
</ul>
</nav>
<nav class="header-nav">
<div class="social">
<a class="github" target="_blank" href="/#" title="github">github</a>
<a class="weibo" target="_blank" href="/#" title="weibo">weibo</a>
<a class="rss" target="_blank" href="/#" title="rss">rss</a>
<a class="zhihu" target="_blank" href="/#" title="zhihu">zhihu</a>
</div>
</nav>
</section>
<section class="switch-part switch-part2">
<div class="widget tagcloud" id="js-tagcloud">
</div>
</section>
<section class="switch-part switch-part3">
<div id="js-aboutme">为了记录自己所学过的知识,同时也为了帮助需要这些知识的人们</div>
</section>
</div>
</div>
</header>
</div>
</div>
<div class="mid-col">
<nav id="mobile-nav">
<div class="overlay">
<div class="slider-trigger"></div>
<h1 class="header-author js-mobile-header hide">Abner</h1>
</div>
<div class="intrude-less">
<header id="header" class="inner">
<div class="profilepic">
<img lazy-src="/img/self.JPG" class="js-avatar">
</div>
<hgroup>
<h1 class="header-author">Abner</h1>
</hgroup>
<p class="header-subtitle">一个90后的双鱼座文艺IT青年</p>
<nav class="header-menu">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/archives">所有文章</a></li>
<div class="clearfix"></div>
</ul>
</nav>
<nav class="header-nav">
<div class="social">
<a class="github" target="_blank" href="/#" title="github">github</a>
<a class="weibo" target="_blank" href="/#" title="weibo">weibo</a>
<a class="rss" target="_blank" href="/#" title="rss">rss</a>
<a class="zhihu" target="_blank" href="/#" title="zhihu">zhihu</a>
</div>
</nav>
</header>
</div>
</nav>
<div class="body-wrap">
<article id="post-js-overload" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2015/11/29/js-overload/" class="article-date">
<time datetime="2015-11-29T08:12:20.000Z" itemprop="datePublished">2015-11-29</time>
</a>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2015/11/29/js-overload/">js-overload</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h1 id="Javascript_的重载">Javascript 的重载</h1><h2 id="Overview">Overview</h2><p>我们知道在其他面向对象的语言比如JAVA还有Python等,他们都有重载这一概念。但是在Javascript中并没有这个面向对象的特性,其实javascript确实被定义为一门面向对象语言,但是面向对象的很多特性javascript都没有实现。但是javascript提供了灵活性很高的接口——prototype。很多特性我们可以另外实现在通过prototype添加,这样我们便可以使用这些特性。但是这里要说明一点的:有人说既然这门语言没有实现它们为什么还要多此一举的去实现它们呢?很好的问题,但是我想说自己加这些“轮子”只是为了让自己的程序更加的精简和高可用 一切都是为了Write Less Do More!<br>Ok 说了这么多,今天我想分享的是面向对象中重载(overload)在javascript中的应用和实现。Let’s do it!</p>
<h2 id="Javascript重载的实现">Javascript重载的实现</h2><p>需要实现重载我们需要了解闭包(closure),还有我们会用到Function的length熟悉和arguments,this。当然我们还用到了每个Function都实现的apply方法。有了这些知识之后我们便可以来实现重载了。下面就是javascript重载的实现:</p>
<p><pre><code><br>function overLoad(obj,funcName,fn){<br> //这里我们用一个变量来保存之前定义的函数<br> var old = obj[funcName];<br> //程序的核心实现<br> obj[funcName] = function(){<br> //这里去判断fn函数定义的形参的个数是不是等于传入这个函数的实参的个数<br> if(fn.length == arguments.length){<br> //如果是话那么我们直接去调用fn<br> return fn.apply(this,arguments);<br> }else{<br> //否则我们检查如果old是一个函数的话<br> if(typeof old == ‘function’){<br> //是的话直接调用<br> return old.apply(this,arguments);<br> }else{<br> //抛出一个错误<br> thorw ‘function undefined’;<br> }<br> }<br> }<br>}<br></code></pre><br>这些主要的程序写完了下面看我们这么用我们现在写好的方法。</p>
<p><pre><code><br> //定义一个对象我们把重载的方法绑定在这个对象上<br> obj = {};<br> //初始化我们的需要重载的方法<br> overLoad(obj,’saying’,function(){<br> console.log(‘Abner is a good boy’);<br> });<br> overLoad(obj,’saying’,function(name,gender){<br> console.log(name + ‘ is a good ‘+ gender);<br> });<br> //下面是调用我们写好的方法<br> obj.saying(); //Abner is a good boy<br> obj.saying(‘xx’,’girl’) //xx is a good girl<br></code></pre></p>
<h2 id="总结">总结</h2><p>这里实现重载我们用了一个很关键的技术就是闭包,闭包是一个十分神奇的技术,当我们第一次定义重载方法的时候变量<code>old</code>是等于<code>old</code>的但是第二次的时候<code>old</code>是一个函数了,如果我们直接不传参数使用<code>saying</code>方法那么程序就会去<code>old</code>存储的方法,最后找到无参数的方法并调用它。是不是很神奇。好了重载我们就说到这。如果有什么问题可以在下面评论我看到会及时回复。谢谢。</p>
</div>
<div class="article-info article-info-index">
<div class="clearfix"></div>
</div>
</div>
</article>
<article id="My first post-post" class="article article-type-My first post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2015/11/22/post/" class="article-date">
<time datetime="2015-11-22T02:26:43.000Z" itemprop="datePublished">2015-11-22</time>
</a>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2015/11/22/post/">node.js 与 javascript</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h2 id="Javascript_和_node-js_的关系">Javascript 和 node.js 的关系</h2><p>我们都知道node.js和Javascript两者有这一定的关联,是的,node.js不是一种语言,node.js是一个平台把javascript这语言应用到了服务器端,这很美妙。可以用一种语言开发前端和后端的工作,这确实让一个程序员感到无比的振奋,让那些不懂得后端的人有能力也后端的程序。在今年javascript也迎来了自己的春天ES6的到来,这对javascript来说是历史性的,对于用javascript的人来说也是感到兴奋的,因为javascript增加了一些新的特性和功能,让javascript更加的强大和易用。当然随后Node.js便合并了io.js。开始支持ES6的一些特性和功能。</p>
<h2 id="未完待续">未完待续</h2><p>这是我第一篇博客,所以先给大家打个招呼,未完待续。</p>
</div>
<div class="article-info article-info-index">
<div class="clearfix"></div>
</div>
</div>
</article>
</div>
<footer id="footer">
<div class="outer">
<div id="footer-info">
<div class="footer-left">
© 2015 Abner
</div>
</div>
</div>
</footer>
</div>
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" type="text/css">
<script>
var yiliaConfig = {
fancybox: true,
mathjax: true,
animate: true,
isHome: true,
isPost: false,
isArchive: false,
isTag: false,
isCategory: false,
open_in_new: false
}
</script>
<script src="http://7.url.cn/edu/jslib/comb/require-2.1.6,jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="/js/main.js" type="text/javascript"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
}
});
MathJax.Hub.Queue(function() {
var all = MathJax.Hub.getAllJax(), i;
for(i=0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
</div>
</body>
</html>