<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Zhangs&#39;blog</title>
  <subtitle>我与我周旋久，宁作我</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://zsqosos.github.io/"/>
  <updated>2018-09-02T15:11:39.035Z</updated>
  <id>http://zsqosos.github.io/</id>
  
  <author>
    <name>Zhangs</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>论死亡</title>
    <link href="http://zsqosos.github.io/posts/life/20180902-in-memory-of-grandma/"/>
    <id>http://zsqosos.github.io/posts/life/20180902-in-memory-of-grandma/</id>
    <published>2018-09-02T14:16:54.000Z</published>
    <updated>2018-09-02T15:11:39.035Z</updated>
    
    <content type="html"><![CDATA[<p>外婆去世有近两个月了，最近做梦总是会梦到她，在梦里发生的零零碎碎的事，是那么清晰，但醒来却再也想不起来了。外婆去世后，这个世界上跟外婆有关的东西，就只剩下关于外婆的回忆。我很担心有一天，我的记忆也渐渐模糊，就像梦醒一样，这个世界关于外婆的东西就再也没有了。时间真是个可怕的东西，可怕到在不知不中就可以毁灭一切。</p>
<p>我总在想，生命的终结到底意味着什么？每个人都有丰富的一生，每个人都是独一无二的个体，可是生命终结之后，一切都没有了。世界上大多是普普通通的人，等我们过完平凡的一生，百年之后，就不会有人再想起，虽然一些科学巨匠、艺术大师、思想家、政治家们，他们死后因为生前的贡献而流传百世，可以被更多的人想起，可以在这个世界上多留下一点痕迹，但是经过时间的洗礼，终究免不了被遗忘，被遗忘之后，这个世界将永远不存在与这个人有关的任何东西了，无论世界如何发展，无论如何变迁，都不可能再参与，甚至都不可能知晓，在历史的长河里，一个人的一生连零点零一秒都比不上，但就这不到一秒的机会，在以后的亿万年里也不会再有了。世界如同一团灰烬，每个人是灰烬中的一粒星火，只能闪亮一瞬间。灭了就再也不会被点亮了，只能化为一粒尘埃，沉寂亿万年，一直到永远。每每想到如此，我都深感恐惧。</p>
<p>论生与死，科学与宗教有截然不同的观点，现代主流科学对待死亡的态度是相对谨慎的，认为身体死亡之后一切就将不复存在，而宗教认为人体死亡之后其灵魂依然存在，无论是佛教的生死轮回，还是基督教死后的上天堂与下地狱，都表明了宗教的灵魂存在论。显然宗教的生死观比起科学的生死观，要更为乐观，一个人的一生结束了，并不意味着永远的沉寂，以佛教来说，死亡意味着进入下一个轮回，也就是死亡其实是新的开始。而当前科学的生死观则显的悲观绝望，死亡就意味着不复存在，一个人出生之前的世界跟这个人毫无关系，死后的也不会对这个世界产生巨大影响，唯一的意义就是在这个世界上存在过一瞬间，这种绝望令人极其压抑，以至于科学对死亡的态度十分悲观谨慎，当有人离世，人们就要惋惜、追悼。科学的生死观告诉人们，一个人在这个世界上只有一次机会，人们的潜意识里对待死亡便是一种恐惧的态度，所以有人就试图改变客观规律，寻求长生不老，想着永世长存，但在这点上，科学和宗教的观点是一致的，生老病死是不可能避免的。《圣经》中说“人，本是尘土，仍要归于尘土”，佛教中有分段生死的理论，科学研究也表明人体各个器官的寿命都是有限的，思想意识也无法复制，死亡是无法避免的，而这些进一步加深了信仰科学的人对死亡的恐惧。而由于宗教的灵魂存在论，宗教信仰者对待死亡的态度则要乐观的多，大多数宗教徒对死亡并没有恐惧心理。当然，这种乐观的生死观并不只存在于宗教思想之中，东西方哲学思想中对待死亡也有不少持乐观态度，庄子丧妻鼓盆而歌，苏格拉底把死亡看做灵魂摆脱牢笼获、从而获得永生等等，但是为何乐观看待死亡在宗教中体现的更加明显呢？是因为宗教的传播范围更广，受众比哲学更多，所以我们看到乐观看待死亡的人多数是宗教信仰者，而对待死亡持悲观态度的大多数是倍加崇尚科学的人。</p>
<p>灵魂是否存在？科学既无法证实也无法证伪，宗教则深信其存在。现阶段的科学研究主要针对物质本体，对于个体死亡后的思想、意识等精神领域，如同黑洞内部，科学无法有效的观测研究。而宗教理论恰好填补了这一空白，其对待死亡的基本观点都是个体死亡后灵魂将脱离肉体，进入另一世界。在这方面，科学与宗教恰恰形成了一种互补，而非大多数人认为的冲突关系。从宗教与科学面向的对象来看，宗教更多的是探讨灵魂、意识、道德等精神领域，而科学面向的对象更多的是研究物质以及物质之间的关系，所以二者从本质上来讲并没有不可协调的冲突，仅仅是对于现有的物质世界的解释存有争议，这也说明宗教的存在具有一定的合理性。</p>
<p>对于我来说，我自读书识字起就接受到科学的教育，所以对科学理论和科学解释深信不疑，这也是我认识世界和赖以生存的根本。另外，我一直以来受到到佛教思想的熏陶，佛教中劝人向善的思想、对待死亡的态度、渡化世人的大爱思想等，我也颇为认同。在对待死亡的问题上，科学让我感觉到的只有恐惧，我只能哀吾生须臾，知我的一生不过沧海一粟，让我感到渺小，让我感到无助，让我感到绝望。而佛教面对死亡的淡然态度，让我不再畏惧死亡，让我看到希望的光芒，从而对待万事万物也更加淡然。因此比起科学的生死观，我更认同宗教的生死观。</p>
<p>今年农历五月廿四日，外婆去世了，我的内心并没有泛起太大的波澜，生老病死，在所难免，外婆生前，我已尽力尽孝，了无遗憾。感谢外婆陪我走过的这二十多年，愿时间暂且放过我的记忆，让我即使老去，也能留下关于外婆的回忆。</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;外婆去世有近两个月了，最近做梦总是会梦到她，在梦里发生的零零碎碎的事，是那么清晰，但醒来却再也想不起来了。外婆去世后，这个世界上跟外婆有关的东西，就只剩下关于外婆的回忆。我很担心有一天，我的记忆也渐渐模糊，就像梦醒一样，这个世界关于外婆的东西就再也没有了。时间真是个可怕的东
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="杂文" scheme="http://zsqosos.github.io/tags/%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>丁酉这一年</title>
    <link href="http://zsqosos.github.io/posts/life/20180101-2017/"/>
    <id>http://zsqosos.github.io/posts/life/20180101-2017/</id>
    <published>2018-01-01T08:55:40.000Z</published>
    <updated>2018-01-06T17:29:55.417Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/2017.jpg" alt=""></p>
<p>近年来，每逢元旦，便要拿起笔来总结一番，先是回顾今年，再是计划来年，似乎成了一个惯例。然而，每每翻起之前回顾，除了看到当年的矫情之外，并无其它。对于计划来说，也甚是无奈，世间变化莫测，每年所列的大多计划，最终都因各种变故而搁置或取消，计划更像一纸空头支票。但我每年依然乐此不疲的做着这件事。一来，想着记录下自己的当年，无论矫情与否，失意得意，总归是自己的人生，当有一天重新拾起，也能留个“案底”。二来，虽说计划赶不上变化，但也该制定一年计划，作为路上指引，起到敦促自己的作用，倘若有些变故，在做调整也未尝不可。<a id="more"></a></p>
<p>如今，无论亲友，但凡问起近况，无非是在哪儿高就？何处发财？月入几斗？我虽不喜这种除了升官发财便无话可说的交谈，但长此以往也无甚办法，渐渐竟也不那么反感。既如此，便从工作谈起吧。</p>
<p>丁酉年伊始，应友人相邀，便一人北上京城，随后栖居友人门下。初去之日，游乐看景，以作修养，然北京城开销甚高，不需时日，囊中干瘪，心系就业之事，也就无心看景娱乐。当时打着转业追梦之名，四处求访，只为求得一职，却总被拒之门外。而后细细分析，只因自己学艺不精。但生存之事迫在眉睫，总得求得一职，食可果腹。便想着凭借大学四年所学，从事本业断然无甚问题，日后曲线救国，再转业不迟。果然，不出两日，便得一职。本曾想，工作一两月就转业离开，然而时光飞逝，每日只顾喝酒聊天，转眼便是一年。前几日，得朋友照顾，推荐工作，依然从事本业，但我难弃心之所往，摇摆甚久，而后好友往来游说陈述利弊，我亦发现之前思想之局限，便痛下决心，当在本业有所施展，于是朝日之间辞去旧职，南下成都，转业之事日后也无需再提。</p>
<p>初来巴蜀之事，暂且不谈，北京工作这一年，到还有话可说。一年之工作，说到底不过是马马虎虎，技能也有所增长。所幸之事，在此地遇到两位知心同事，其一姓刘，其一姓薛，如今可称好友，每每下班之后，相约一小酒馆，喝三两小酒，谈天说地，小到公司琐事，大到宗教哲学，相谈甚欢。其中刘姓朋友，信奉佛教，好读书，家中藏书无数，知识渊博，亦师亦友，可为我之人生楷模。知我者皆知我酒量极少，对劝酒之人更是深恶痛绝。古人云，酒逢知己千杯少，话不投机半句多，历经此年，我对此话感触颇深。我也是个信佛之人，一日喝酒闲聊之时，与他聊起《无量寿经》，只因我读过时日太久，其中内容大都已记不起，难免心生羞愧，近日又重新拾起，倒也新有所悟，重读佛教经典自然也将列入来年计划之内。一年工作不过如此，庆幸交的二三好友，也不算虚度此年。</p>
<p>谈起生活，在京一年，起居日用花费甚高，初去之时，俩人又无甚积蓄，只求温饱，落宿之处条件苛苦，当中友人来访，也只能委屈栖居，如今看来，的确招待不周，承蒙好友不嫌不弃，也该在此言谢。而后，辛苦劳作而得，足以另辟它所，便寻得新处乔迁，新所虽条件尚可，然而事事难料，不出两月，合同有误，只得又迁新所。住满两月，又遭拆迁，勒令搬离，无奈又得辗转别处。在京短短一年，搬迁三次，住所更换四处。人言乔迁之喜，在我看来，搬迁多达一年三次，实在是无喜可言，反到饱受劳民伤财之苦。总之，北京城甚大，不乏高官权贵，亦不缺穷苦民众，在此处生活一年，深感不易，只想起杜甫之言，真可谓“朱门酒肉臭，路有冻死骨”。如今我已逃离京城，难易与否已与我无甚关系了，只愿留下好友能尽力做事、成就其梦。</p>
<p>我爱好精神文化之事物，常常醉心于此，不易乐乎。无奈今年牵扯过多，读书、写文、练字，另外研习计算机、建筑暖通之学问，虽力求精进，但精力有限，均只学的皮毛，无一专长，此乃不足，不过今后时日尚多，不可因多杂而弃一二，均应精进。谈起读书，今年所读无多，寥寥数本，屈指可数。好在还算刻苦，利用所学，建成个人站点，网站开通之后，胡编乱邹的文章倒是写了一些，也算是年末之幸。练字数月，也只是有所长进，不敢妄言，还当精进。</p>
<p>京城之妙在于其公共资源优厚，此一年，倒得我心。其中图书馆藏书众多，古今典籍、中外名著数不胜数，并且环境优雅、气氛清净，已然成为我每周必去之所。除此之外，我钟爱科幻作品，对宇宙间时空穿越题材颇有兴趣，为此查阅众多资料，其中天文馆奥妙绝伦，模型细致巧妙，对宇宙基本知识阐释的精准简洁，无奈上次与友同游，时间紧促未能细细品赏，到成了一大憾事，日后若有缘进京，此事定当补全。在京一年，另有一妙事，可谓多年梦想，便是听了一场周氏演唱会，的确痛快非常，若日后另有机会，一定携友再去。</p>
<p>回首望去，丁酉一年，无甚成绩，然一切皆随我心愿，所想之事均有所及，做的本我，甚是悠哉。不过不足之处众多，今后均应规避。在此列出来年目标，望能努力达成。</p>
<p>目标如下：</p>
<ol>
<li>通过注册设备工程师基础考试。</li>
<li>通过二级建造师考试。</li>
<li>学习python，练习爬虫，达到可熟练爬取信息的程度。</li>
<li>临摹完小楷，开始练习行草，并开始使用毛笔。</li>
<li>（尽量）每月更博一篇。</li>
<li>至少阅读完以下书籍。</li>
</ol>
<ul>
<li>《深入理解计算机系统》</li>
<li>《无量寿经》</li>
<li>《阿弥陀经》</li>
<li>《法华经》</li>
<li>《妙法莲华经》</li>
<li>《金刚经》</li>
<li>《道德经》</li>
<li>《果壳中的宇宙》</li>
<li>《引力与时空》</li>
<li>《超越时空》</li>
<li>《四维旅行》</li>
<li>《西方哲学史》</li>
<li>《毛泽东选集》</li>
<li>《鲁迅文集》</li>
<li>《二战回忆录》</li>
</ul>
<p>这15本作为必读，一定要读完，强调一遍，一定要读完，若计划完成较好，时间充裕，应在此基础上扩展。</p>
<p>年末立下这6大flag，希望每一个都不会倒下，尽心尽力去完成。</p>
<p>————丁酉年末</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/2017.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;近年来，每逢元旦，便要拿起笔来总结一番，先是回顾今年，再是计划来年，似乎成了一个惯例。然而，每每翻起之前回顾，除了看到当年的矫情之外，并无其它。对于计划来说，也甚是无奈，世间变化莫测，每年所列的大多计划，最终都因各种变故而搁置或取消，计划更像一纸空头支票。但我每年依然乐此不疲的做着这件事。一来，想着记录下自己的当年，无论矫情与否，失意得意，总归是自己的人生，当有一天重新拾起，也能留个“案底”。二来，虽说计划赶不上变化，但也该制定一年计划，作为路上指引，起到敦促自己的作用，倘若有些变故，在做调整也未尝不可。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="杂文" scheme="http://zsqosos.github.io/tags/%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>宇宙漫游指北(一)</title>
    <link href="http://zsqosos.github.io/posts/life/20171017-space-roaming/"/>
    <id>http://zsqosos.github.io/posts/life/20171017-space-roaming/</id>
    <published>2017-10-17T08:55:40.000Z</published>
    <updated>2018-01-06T17:29:57.134Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/space.jpg" alt=""></p>
<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>根据现有科学推断，如今距离宇宙大爆炸已经过去了约140亿年，随着人类科技飞速发展,对宇宙的研究及探索也成绩斐然。1969年阿波罗11号登上月球，这意味着人类第一次踏上了地球之外的土壤，这的确是航天史上的壮举，也是整个人类的骄傲，但是作为在宇宙尺度的探索，人类踏上月球的举动，恐怕只类似于一个从未出过门的人打开了自己房间的窗，把自己的头伸出去看看而已。<a id="more"></a></p>
<p>随着宇宙学理论的的发展，大量的宇宙探索类科幻作品涌现了出来，其中不乏优秀用心之作。这些科幻作品的出现弥补了很多人类关于宇宙的幻想，让人类在宇宙空间中也可以留下自己的故事，人类可以在宇宙中漫游，可以星际旅行，可以穿梭时空，可以探索其他星系，也可能发现外星文明，甚至发生星际战争。</p>
<p>等等，看这篇文章的名字，就该知道我又要开始胡说八道了，但为何还要这么严肃的交代一下背景呢，这可不是我一贯的风格，应该一开场就信口开河、胡说八道才对嘛。其实了解宇宙的浩瀚，就足以让人心怀敬畏，对宇宙的研究和探索也该是严谨严肃的。我这么做，除了向宇宙的探索者表达敬意之外，还用以表明我的敬畏之心。本文使用了一些基础物理理论作为支撑，同时结合大量科幻作品完成的，文中存有当前真实理论，当然也不乏幻想，读者可自行分辨真伪。请读者仅把此文看作是一篇入门级科普文，若按此文操作，发生各种不可逆的时空穿梭或物质湮灭，造成的后果笔者概不负责呦。</p>
<h3 id="宇宙的尺度"><a href="#宇宙的尺度" class="headerlink" title="宇宙的尺度"></a>宇宙的尺度</h3><p>“上船、走吧”，一个长相神似黄渤的小伙冲你吆喝着，“还差两个人就要开船了，去DX3906星系的飞船本月就剩这一趟了，再不走可就没机会了”，小伙操着一口纯熟的青岛话对你如是说。是不是该懵逼了？DX3906星系是什么××玩意？小傻×，啊，不，小兄得，我完全没有笑话你的意思，把你手中的刀先放下，我们来聊一聊，你想要去别的星球玩耍，首先得知道你的目的地，对吧。既然你啥子都不懂，我们就从头来讲好了。</p>
<p>我们居住的地方叫地球，地球是围绕着一颗叫做太阳的恒星运转的，除了地球之外呢，太阳系还有其他绕日公转的行星伙伴，分别是水星、金星、火星、木星、土星、天王星、海王星。以及一些矮行星，包括冥王星、谷神星、阋神星、鸟神星等。那么行星和矮行星的区别是什么呢？</p>
<hr>
<p>未完待续。。。（得了懒的病，治不好了〒_〒）</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/space.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h3&gt;&lt;p&gt;根据现有科学推断，如今距离宇宙大爆炸已经过去了约140亿年，随着人类科技飞速发展,对宇宙的研究及探索也成绩斐然。1969年阿波罗11号登上月球，这意味着人类第一次踏上了地球之外的土壤，这的确是航天史上的壮举，也是整个人类的骄傲，但是作为在宇宙尺度的探索，人类踏上月球的举动，恐怕只类似于一个从未出过门的人打开了自己房间的窗，把自己的头伸出去看看而已。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="科幻" scheme="http://zsqosos.github.io/tags/%E7%A7%91%E5%B9%BB/"/>
    
  </entry>
  
  <entry>
    <title>给我一张过去的《七里香》</title>
    <link href="http://zsqosos.github.io/posts/life/20170826-jay-concert/"/>
    <id>http://zsqosos.github.io/posts/life/20170826-jay-concert/</id>
    <published>2017-08-25T16:00:02.000Z</published>
    <updated>2017-09-02T12:39:51.774Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/jayQilixiang.jpg" alt=""></p>
<p>从开始听周杰伦的歌到现在，大约也有十年时间了。我一直都觉得去现场听他唱歌是一件很遥远的事，毕竟我很穷，即使听了十年，也没有闲钱能够用来去听一次他的演唱会，所以这件事只能成了一种期待，就像米兰的小铁匠，每天攒着铜板，期望自己有一天能买到橱窗里那把吉他，终于在昨天，小铁匠买到了那把吉他。<a id="more"></a></p>
<p>昨天出了地铁站，从东四十条到工体那段路挤满去看演唱会的人，和这些志同道合的友人走在去往工体的路上，我竟有一种带领凯旋的将士走在国王大道上的荣耀感，毕竟在我看来，去听周杰伦的演唱会和战胜敌人凯旋归来同样重要，当然带领凯旋将士归来这件事绝对是一种错觉，荣耀感倒是真的。随着拥挤的人流慢慢悠悠挪到工体，演唱会还未开始，人却差不已经坐满，等到天色渐渐暗下来，无数粉红色荧光棒就在空中跳动起来，划分每个区域的围栏也在粉红色的人海中变得愈加明显。远远看去，粉红色的人海被围栏切成了一块一块的，看起来像是草莓味甜点，给人一种甜甜的感觉，这种感觉是我心中真实的愿景，绝不是我没来得及吃晚饭饿着肚子的缘故。终于，杰伦在炫酷的背景音乐中，唱着“penta kill”出场了，那一刻，全场都沸腾了，像是甜点上那些亮晶晶的草莓味点缀都想要跳出那块甜点的束缚，去跟着音乐舞动。整场的尖叫声也从没停下来，这没什么好意外，因为他的歌有唱过，听他的blues，一定要学会尖叫。我从来都是一个安静的人，大吼大叫的本领一直都没能学会，但在这么燃的场景下，很容易让人投入其中，我二话没说一把就撕掉了我那假斯文的面具，放荡不羁的怪吼起来，这种酣畅淋漓的痛快感确实好久都没体会过了。当然，他的音乐可不只有燃，当七里香的前奏响起，上万人和他一起合唱的时候，我的脑袋里满满的都是感动和回忆。</p>
<p>还记得上初中的时候，我们学校有一大传统，就是每次上课前，都要由文艺委员起头，全班同学合唱一首歌作为一节课的开始，学校最初的意图是希望我们唱一些类似于红旗飘飘或者国际歌这种红色歌曲，但是显然我们并不喜欢这些，所以课前要唱的歌自然而然就被文艺委员换成了我们喜欢的歌，而那时候唱的最多的一首就是彩虹，多年之后每当我听到这首歌，依然会想起学生时代全班同学合唱彩虹等老师来上课的情景。我是上初中才开始听周杰伦的歌，那时候已经过了用卡带听歌的年代，我也买不起mp3，听歌都是在163音乐网上听，我记得当时的歌都是可以随便下载的(现在回头来看，音乐的版权之路确实走了好久)，在我把我家电脑c盘塞满了周杰伦的歌之后，电脑就开始了频繁死机，我捣鼓计算机这条不归路大约也是从那时候开始的。在当时，便携的听歌设备很少，想随时随地听歌并不那么容易，既然听不了，那就干脆自己学着唱，所以班上很多人就会把喜欢的歌抄在笔记本上，我也不例外。我那时候字丑的出奇，记得当年作业交上去，老师因为不认识我写的而字勒令让我重写，但我那抄满周杰伦歌曲的歌词本却一直被大家来回传阅。到了初三，我就暗自庆幸被分在了二班，可以很自豪的去跟别班的同学讲我是三年二班的，那时三年二班这首歌也就成了我最爱的一首歌。</p>
<p>后来，到了高中，无意中又翻看了《不能说的秘密》，那时候才真正看懂了这部电影，我被那巧妙的剧情和美妙的插曲所折服，从那之后，这部电影就一直排在我心目中的第一位，直到后来我看到了《黑客帝国》三部曲。那时候，不能说的秘密也成了我最喜欢的歌，在早读不想读书的时候，我就会偷偷唱这首歌，在大家洪亮的读书声里也不会有人发现，但由于我经常唱，还是被前桌的女孩听到了，她就要我在课间的时候唱给她听。再后来，我把《不能说的秘密》下载到平板电脑里给她看，她说她也很喜欢这部电影。那一年，我成功牵到了那个陪我看不能说的秘密的女孩子的手。现在想想当年自己给女孩唱歌时那慌张的模样，也是青春岁月中美妙的插曲。</p>
<p>到了大学，生活变得多元起来，大家喜欢的歌手也都不大相同，我的舍友有的喜欢李健，有的喜欢许巍，当然也有喜欢周杰伦的。而那年，大多数人都很喜欢陈奕迅，我依稀记得那时网上有一篇很火的帖子说，长不大的人才听周杰伦，成熟的人都听陈奕迅。而当时还年轻的我，三观不那么稳定，很容易受别人的影响，我就想上了大学怎么也该做出一些改变，那表现的成熟一点也是一件极其自然的事了，所以我就信了这句鬼话，也跟着大家开始听陈奕迅。不得不说陈奕迅的歌也很好听，但听来听去总觉得少了一点味道。后来，我才明白，选择听谁的歌和成不成熟根本没有半毛钱关系，听陈奕迅的歌并不能让我感动，能让人感动的歌曲，除了歌曲本身的感动之外，还有那歌里的故事，而我的故事全都在写在周杰伦的歌里。从那以后，我就在听周杰伦的路上坚定不移的走了下去，直到现在还在继续。</p>
<p>有朋友问我说，你这么冷静的人，想不到也有这么狂热的一面，周不过是一个流行歌手而已，他有什么魅力能吸引这么多人？在我看来，冷静与狂热并不冲突，冷静不过是我对待世界的常有态度，而能让我狂热的才是追求，就像水面时常平静，但起风时也会泛起波澜。对于音乐也是一样，《月光曲》可不只有平静悠扬，更有波澜壮阔的美。音乐作品本就是艺术品，对艺术的追求就该狂热，世间伟大的艺术家或多或少都有痴狂的一面，而我现在的追求仅仅是学会欣赏这些艺术品而已，“狂热”一词，我是担当不起的。诶，好像扯远了，还是说回周杰伦，曾有人评价说，周杰伦的慢歌用来负责流行，而他的快歌才代表了他作品的深度。从前我不怎么理解这句话，那时我更喜欢七里香、不能说的秘密、蒲公英的约定等等。如今，我回过头去重温那些快歌，发现亲情、禁毒、环保、反家暴、倡导和平等主题早在十多年前就被他写进歌里，这些歌在今天看来依然是无人能够超越的经典，每一首都称得上是精美绝伦的艺术品。我很庆幸能和他处在同一个时代，他的音乐不仅代表了我的青春岁月，更能让我在这喧杂的世界中找到一份宁静。听他的歌听了十年，他的歌早已不单单是一首歌那么简单，已然成为了一种精神寄托，每当我在人生的路上有所动摇，听着他的歌，就能让我回归平静，带着孤寂，继续前进，直到光明。我想这就是他的魅力所在吧。</p>
<p>最后附上我在8月25号演唱会上记录的歌单，谨以此来纪念我人生中参加的第一场演唱会。</p>
<p><img src="/assets/blogImg/songList.jpg" alt=""></p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/jayQilixiang.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;从开始听周杰伦的歌到现在，大约也有十年时间了。我一直都觉得去现场听他唱歌是一件很遥远的事，毕竟我很穷，即使听了十年，也没有闲钱能够用来去听一次他的演唱会，所以这件事只能成了一种期待，就像米兰的小铁匠，每天攒着铜板，期望自己有一天能买到橱窗里那把吉他，终于在昨天，小铁匠买到了那把吉他。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="周杰伦" scheme="http://zsqosos.github.io/tags/%E5%91%A8%E6%9D%B0%E4%BC%A6/"/>
    
  </entry>
  
  <entry>
    <title>李文星之死</title>
    <link href="http://zsqosos.github.io/posts/life/20170803-mrLi-dead/"/>
    <id>http://zsqosos.github.io/posts/life/20170803-mrLi-dead/</id>
    <published>2017-08-03T12:26:46.000Z</published>
    <updated>2018-06-24T13:00:24.835Z</updated>
    
    <content type="html"><![CDATA[<p>新闻链接：<a href="http://www.jiemodui.com/N/82675.html" target="_blank" rel="external">求职少年李文星之死 | 芥末堆</a></p>
<p>早上在开发群里看到消息，一位学java的同学在求职时，陷入传销骗局，多日无法联系，于近日不幸身亡。这位同学叫李文星，94年生、23岁、16年毕业、工科专业、转行it。除去姓名，这些词汇用来描述我也是再准确不过了。我之前并不认识李同学，以这样的方式去认识一个和我如此相似的人，我很遗憾。<a id="more"></a></p>
<p>起初，他们追杀共产主义者，我不是共产主义者，我不说话；接着，他们追杀犹太人，我不是犹太人，我不说话；后来，他们追杀工会成员，我不是工会成员，我不说话；此后，他们追杀天主教徒，我是新教徒，我不说话；最后，他们奔我而来，再也没有人站出来为我说话了。一直一来，我都是那些沉默的大多数中的一员，但这次我必须发声了。</p>
<p>我不怕他们奔我而来时，没人替我说话，我也不怕当厄运降临在我头上时，无人发声。我之所以想说出我的看法，并不是因为我与李同学有相似的经历，也不是出于我的愤怒，而是我不愿看着有人付出年轻的生命作为代价，还依然有人干着违法的勾当去残害更多的人，还依然有资本家吃着人血馒头，用别人的血肉和尊严盖起利益的高楼。更不愿看到传销组织肆意猖獗，却无人处理的景象。我只希望这个世界再也不要出现魏则西、徐玉玉、李文星这样不幸的人。</p>
<p>鲁迅先生说：“我向来是不惮以最坏的恶意来推测中国人的”。我之前也觉得这个世界还是充满良知的，至少在我活着的这23年里遇上的都还是一些友善的人。可今日的事态，却让我目不忍视。</p>
<p>毕业一年，23岁，正是风华正茂的年纪，无奈，却遭此不幸。事已至此，网上多了许多如何避免求职受骗的文章，但如何避免，绝非问题的根本。在我看来，在整个事件中，若有一个环节中的人还能记得“良知”二字，李同学也不用以生命为代价去提醒我们，生活其实处处充满了危险。</p>
<p>万恶的传销组织，是杀死他的直接凶手。官方的调查结果还没有出来，李同学是自杀还是他杀尚且情况不明，但如若没有传销组织策划这场骗局，他又怎会陈尸异地。今天看到很多关于传销的文章，真真假假，假假真真，我从未见过传销人员，更不清楚传销人员都是什么样子，但从描述来看，并不是长着红眼睛、有三个头、六条胳膊的恶魔，他们也是普通人，也是黄色的皮肤，黑色的眼睛，但令我我很奇怪的是，他们的心去哪儿了？他们虽然看起来和普通人一样，但他们的心却没有了，没有了心，失去了良知，他们已经算不上是人了。发给李同学招聘需求的那个家伙，真的不清楚自己所做的是什么事吗？我不清楚这些亏心的勾当能给他们带来怎样的精神快感或物质条件，但这些事违背良心，违反法律，难道他们就一点也不清楚吗？我觉得人活着还是需要记得“良知”二字的。</p>
<p>boss直聘是杀死李同学的助手。李同学通过boss直聘平台投递简历，却在口碑还算不错的平台遇上招聘骗局，结局的发展更是出人意料。在这次事件中，boss直聘作为招聘平台却对注册企业不做任何审核，可任由注册用户发布招聘信息。就在事出的今天，个人伪装成企业去招聘，也没有任何审核与限制，这就让不法分子可以随意假借招聘的名义来行骗。作为一家大型招聘网站，每日只顾售卖简历得来的利益，却从来不顾用户的死活，直到今天，这种不齿行为才被人所认知。如若boss直聘对每个招聘企业都进行严格核查，尽到应尽之责任，事情的结局也不会这样。如此行为，就如同看着骗子在自己家里行骗，却莫不做声一般。资本都是逐利的，但利益绝不应该肆意践踏无辜之人的鲜血，用如此卑劣下作的方式换取利益，我感到恶心，吃着人血馒头来充饥，良心就不会不安吗？历史上资本的积累，便少不了流血和肮脏的交易，也许别人的生命在资本家眼里并不值钱，无非是多花点钱罢了，但别忘了，都是人，同样活在世上，拿别人的血去换自己的利益，只会黑了自己的心。</p>
<p>执法机构对传销组织的力度，也起到推波助澜的作用。今天有太多人分享自己曾经被骗进传销组织的经历，这些传销组织的存在不知害的多少人家破人亡，人人都用惨痛的经历去告诫别人应如何注意，然而以描述来看，传销组织规模庞大，如此多人被骗，如此多人知道天津静海区有大量的传销窝点，而执法机构却始终不能彻查。其中原因，我并不清楚，我也不敢妄加揣测，但在此次事件之前，执法机构若能查处这些非法组织，李同学也不至如此。李同学是被很多失去良知的人所残害的，在这样的情况下，道德已经无法约束这些人，唯有依靠法律，可执法部门却容得静海区传销组织存在数十年，我只想问，道义何在？法律又何在？</p>
<p>时间永是流驶，街市依旧太平，有限的几个生命，在中国是不算什么的，多说无益，但愿李同学付出的生命，能让后来人都多一份良知，让这个世界多一份温暖。但愿世人都安好，亦愿世界永远祥和。</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;新闻链接：&lt;a href=&quot;http://www.jiemodui.com/N/82675.html&quot;&gt;求职少年李文星之死 | 芥末堆&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;早上在开发群里看到消息，一位学java的同学在求职时，陷入传销骗局，多日无法联系，于近日不幸身亡。这位同学叫李文星，94年生、23岁、16年毕业、工科专业、转行it。除去姓名，这些词汇用来描述我也是再准确不过了。我之前并不认识李同学，以这样的方式去认识一个和我如此相似的人，我很遗憾。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="杂文" scheme="http://zsqosos.github.io/tags/%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>骑行在大雨滂沱的夜</title>
    <link href="http://zsqosos.github.io/posts/life/20170708-cycling-in-the-rain/"/>
    <id>http://zsqosos.github.io/posts/life/20170708-cycling-in-the-rain/</id>
    <published>2017-07-07T16:21:27.000Z</published>
    <updated>2018-06-24T12:45:18.054Z</updated>
    
    <content type="html"><![CDATA[<p>今天喝了点酒，以下内容都可以当做酒后的胡说八道，完全不必当真。我的直属领导自己开了家公司，晚上请大家伙吃饭，竟也叫上了我这无名小卒，我自然不会辜负领导的一番美意，所以在桌上便喝了一点小酒。了解我的朋友都知道我是一个不爱喝酒并且不喝酒的人，甚至可以说十分厌恶喝酒，酒量也不过就一瓶啤酒，但每次和真正的朋友在一起，我总会爽快的喝两瓶。</p>
<p>东边的夜还很晴朗，西边却是大雨滂沱，而我恰好住在西边。同领导吃完饭已经十一点多了，末班地铁早已停运，北京也不是京都，没有类似于深夜食堂这样的小店让我可以避避雨，无论如何我也得硬着头皮回家。同事开车送我到地铁口，我也不好意思再麻烦人家，就谎称再走几步就到家了，其实还有一大截要走。<a id="more"></a>喝完酒，在大雨滂沱的夜里骑个共享单车回家，这种感觉也很爽，唯一不爽的就是一辆开的贼快的丰田车溅了老子一身水。这种雨中骑行的经历我估计以后也都很少有，所以偶尔经历一次感觉也蛮不错。记得大二军训的时候，晚上突然下起了大雨，虽说只有百十来米的距离，但冒雨跑回宿舍就已浑身湿透，今晚又有了当初的感觉，唯一不同的是，在雨中和我一起穿行的人变了。</p>
<p>大半夜打不起车，只能在雨里骑车穿行，有人会觉得这很辛苦，我却不这么认为。我觉得能做自己喜欢的事，即使过的窘迫也没关系。我不愿光鲜亮丽却无聊的活着，若失去了思想，倒不如不要活着。如今我每天可以做自己想做的事，没有人能限制我回了家做什么，这比我在在工地待着要强多了，失去了自由的生活我宁肯不过。我毕生的追求的就是精神的自由，而不是物质的富足，当然在当前这个阶段，物质对我来讲也十分重要，但最终，精神世界带给我的快乐一定是物质世界不能比拟的。</p>
<p>《黑客帝国》里的塞佛说“无知就是快乐”。的确，如果我没有上过大学，没看过这些乱七八糟的书，我就不会有这些别人不理解的想法，现在的我可能就是一个普通的庄稼人，托人找邻村的姑娘结婚，然后快乐的过完普通平淡的一生。我并不是说这样不好，能平淡的过完一生就是最大的幸福。但是，偏偏我考上了大学，又偏偏看了很多乱七八糟的书，这一切让我认识到了人原来还可以有不一样的活法，学医的鲁迅先生发现医学并不能解救麻木的人们，他知道必须从精神层面去改变他们，他便选择了弃医从文。同样，如果我不知道人生有不一样的活法，我就会很安稳的过完一生，可是不幸的是，我明白了人生可以过得很丰富，我就不会再甘于平淡而安稳的生活。我多希望自己不知道这个世界有这么大，这样便能轻易获得快乐，可惜的是，我自己葬送了这种快乐，却在这婆娑世界的小小夹缝中追求自由，以此来获得快乐。</p>
<p>当我和朋友需要共同决定一件事的时候，我总会顺从他们的意见，而当我需要自己决定自己的人生的时候，我却十分主观，别人的意见对我来讲，并没有太大用处，原因很简单，正如我博客的签名，“我与我周璇久，宁做我”。我与我自己也周旋了很久，做自己其实很难，要忍受很多外界的白眼，甚至是别人的指责，但我也会坚持下去。在我身边，我从没见过这样的人。但是，这种人是真实存在的，最近朴树去参加了一个著名的歌唱节目，原谅我忘记了节目名字，我向来对这些节目不太关心，主持人问他为什么来这个节目，他说“我最近确实很缺钱，人总是要吃饭吧”。我很喜欢这样的答案，简简单单、真真切切，没有那些听惯了的虚情假意，不用去在意大家怎么看、怎么想。有人说，你这么说话顾及过别人的面子嘛，好像是没错，但是我们好像都忘了，我们到底是为了谁而活？难道真的需要时时刻刻去为了顾及别人的面子而连自己的心声都不敢表露吗？这样活着得多累啊。</p>
<p>人是一种社会性动物，一个失去了社会性的人，要么是真正的大师，要么就是疯子。现在太多人做的事情，都是为了得到社会的认可，而不是跟随自己的本心，慢慢的人们就忘记了为什么要做这些，从而失去了自己的真性情，变成一具在社会中游荡的皮囊。人的社会性和真性情是矛盾的，若想做自我，就必须承受一些社会的不满，若只追求社会性，便迷失了真正的自我。对普通人来说，我们都在真性情与社会性之间波动，并达到一个动态的平衡，而那些真正敢于表现真性情的人往往会成为人们仰慕的对象，但人们仅仅停留在仰慕的阶段，不愿去打破自己的平衡，偶尔也会有人冲动一下，表露出自己的真性情，但事后也往往会后悔自己当时这么做。初读《红楼梦》的时候，我就很不大喜欢林黛玉，更喜欢薛宝钗一些，我比较反感林黛玉的刻薄小性，喜欢薛宝钗的世故与稳重。等我多读几遍之后，我慢慢开始喜欢林而不再喜欢薛了，林的刻薄小性是她真性情的一种，薛的作为则完全是为了迎合社会性需求。薛是无论如何不会表现林的那种感情的，即使她们心中的想法相同，林黛玉会将心中所想全然表现出来，而薛宝钗则会选择迎合大众表达自己心中的想法，让所表达的想法更有利于自己。我是一个厌恶世俗的人，所以我很希望自己能像林黛玉那样坚持自己的真性情。但大多数时间自己都俗不可耐，表现出一幅深谙世事的样子，我注定成不了林黛玉或者朴树那样的人，但我希望自己尽量去保持自己的真性情，千万别再社会中丢失了自我。</p>
<p>所谓的真性情其实就是跟随本心，敢于将心中所想、所悟表露出来，而不是为了迎合别人而去指鹿为马。敢于表达也是我这半生缺失了很久的东西，我需要慢慢的把它找回来。《金刚经》中说“凡所有相，皆是虚妄。若见诸相非相，即见如来”。我们所看到的东西都是“相”，马也好，鹿也好，都不过是一种世界的意识形态，而心才是最重要的，心可以决定所看到的“相”，若执意指着鹿说这就是马，也没什么问题，但是有一个前提，就是内心真的看到这是一匹马。若心中认同这是马，而不只是简单的嘴上说说，那也就达到了看所有“相”都不再是“相”了，也就修得正果了。这么说好像有一点唯心主义的色彩，但唯心主义并非全不合理，现在的我也算的上是半个唯心主义者。我们常说不忘初心，方得始终，其实左右也逃不过一个“心”字。我现在还达不到“诸相非相”的境界，但我最起码要保持本心，做一个敢爱敢恨、敢说敢做的自由人。</p>
<p>写在后面的话：现在已经凌晨三点钟了，写完这些废话，好像已经清醒了不少，人都说酒后吐真言，这些东西是真言还是胡话，我也不清楚了。不清醒的时候写的东西，难免语句不顺，错字连篇，但我也不打算改了，既然喝了酒，至少也得表露出一点酒后的真性情吧。</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;今天喝了点酒，以下内容都可以当做酒后的胡说八道，完全不必当真。我的直属领导自己开了家公司，晚上请大家伙吃饭，竟也叫上了我这无名小卒，我自然不会辜负领导的一番美意，所以在桌上便喝了一点小酒。了解我的朋友都知道我是一个不爱喝酒并且不喝酒的人，甚至可以说十分厌恶喝酒，酒量也不过就一瓶啤酒，但每次和真正的朋友在一起，我总会爽快的喝两瓶。&lt;/p&gt;
&lt;p&gt;东边的夜还很晴朗，西边却是大雨滂沱，而我恰好住在西边。同领导吃完饭已经十一点多了，末班地铁早已停运，北京也不是京都，没有类似于深夜食堂这样的小店让我可以避避雨，无论如何我也得硬着头皮回家。同事开车送我到地铁口，我也不好意思再麻烦人家，就谎称再走几步就到家了，其实还有一大截要走。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="杂文" scheme="http://zsqosos.github.io/tags/%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>外婆</title>
    <link href="http://zsqosos.github.io/posts/life/20170702-grandmother/"/>
    <id>http://zsqosos.github.io/posts/life/20170702-grandmother/</id>
    <published>2017-07-02T14:16:54.000Z</published>
    <updated>2017-08-27T05:52:24.373Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/grandma.jpg" alt=""></p>
<p>外婆生在那个战乱的年代。她从没有上过一天学，一辈子也不认识几个字，一生过着穷苦的生活，年轻时候的她一定过得很辛苦。如果可以，我很想看一看年轻时候的外婆。可惜那个时候，普通人没有相机，我更没机会看到外婆年轻时的样子。当外婆拍出她第一张照片的时候，她的脸上已写满了岁月的痕迹。</p>
<p>前几天和外婆通视频电话，外婆看到手机屏幕上的我，高兴的像个孩子，不停的问我什么时候回家，我说国庆放了假就回去，她说你过年离开家都五个月了，你是去外地了吧，你不用瞒着我。我笑着说没有，我就在西安，离家很近的，放了假我马上就回来。<a id="more"></a></p>
<p>来北京有些时候了，每天过着千篇一律的日子，让我自己都已忘记我来了这里有多久,外婆却记得比我还清楚。还记得临走前，为了不让她担心，我告诉外婆，我要去西安工作，不用担心我，离家这么近，一有空我就会回来的。偶尔撒撒慌并没什么不好，当然前提是不要被识破，如今看来，我在这方面确实没什么天赋，而死皮赖脸硬撑的本领倒是有一些。外婆现在眼睛越来越花了，耳朵也不再灵光，偶尔还会犯犯糊涂，所以有时候我会把外婆当小孩子看待，觉得哄一哄她，她也不会知道。可是，我却忘了，我才是真正的孩子，她是看着我长大的，怎么可能会不懂我那一点点小心思。在我眼里，有些事外婆并不清楚，可其实她全都清楚。</p>
<p>外婆说“你不要给我买东西，我现在有吃有穿，每月还能领到国家的钱，这就很好了。你的钱拿去多买点吃的，在外面可要吃饱，不敢为了省钱饿肚子”。对外婆来说，在那个年代，能吃饱饭应该就是莫大的幸福了。所以，她希望我不要经历她曾经受过的苦，她会经常叮嘱我要好好吃饭。每次回到家，外婆都会说你怎么又瘦了，要多吃饭。我说我要是吃成个大胖子再回来，你可就不认识我了，外婆笑的前俯后仰，笑完了，还要告诉我：“你胖成啥样我可都认的出来”。关于这点我一直不大相信，毕竟有一次外婆可是连自己的亲儿子都没认出来。那是在一个吃过饭的午后，外婆坐在门口晒太阳，大舅买了好些东西来看外婆，看到外婆在晒太阳，就说了句：“今这个天气可真好”，外婆也回了一句：“日头好的很嘞”。然后大舅就进屋里放东西去了，这时候外婆转头问我：“刚那人是谁啊？”我听完就乐了：“这是我大舅啊，你咋连你亲儿子都不认识了，哈哈哈，哈哈”，然后大舅出来了，外婆端详了好一会儿，认出那人真是大舅，自己也跟着笑了。</p>
<p>这几年，外婆的眼睛大不如从前了，认错人的情形时常发生，但是每次我回家她总能一眼认出来，当然这都是在我没吃成胖子的前提下。我多希望她的眼睛能和从前一样明亮，这样就算我真成了大胖子，她也能一眼认得出，所以每次回家我都会给她买那些药方上的眼药水，可惜那些滴进外婆眼睛里的药水，并没能让她眼睛变得光明，但我看的到，每当我拿出那些微不足道的眼药水，她的脸上都挂满了笑容。</p>
<p>我待在家里的时候，外婆总喜欢拉着我的手跟我聊天，虽说是聊天，但大部分时间都是她在说，我在听。她说多久，我就坐在在旁边听多久。外婆一生没怎么经历过外面的大千世界，她只懂那些发生在她身边的事，与我聊天的内容也通常就是张三家的孩子去哪儿上学了，李四家又养了多少只鸡之类的事情，偶尔她还会讲讲小时候的我，听这些事并没有什么意思，但能跟外婆坐在一起聊天，我就很高兴了。我高兴，不是因为外婆讲这些普通的事而高兴，而是看到外婆高兴而高兴。</p>
<p>小时候，我需要大人照顾，外婆总会陪着我，如今，我长大了，外婆却老了，现在她成了那个需要照顾的人，我却不能陪在她身边。她要的是陪伴，而不是六百块，说起来是那么简单，而我想要办到却是那么难。我现在没什么的愿望，只希望外婆每天都能过得快乐，而我能再多给她一些陪伴。</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/grandma.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;外婆生在那个战乱的年代。她从没有上过一天学，一辈子也不认识几个字，一生过着穷苦的生活，年轻时候的她一定过得很辛苦。如果可以，我很想看一看年轻时候的外婆。可惜那个时候，普通人没有相机，我更没机会看到外婆年轻时的样子。当外婆拍出她第一张照片的时候，她的脸上已写满了岁月的痕迹。&lt;/p&gt;
&lt;p&gt;前几天和外婆通视频电话，外婆看到手机屏幕上的我，高兴的像个孩子，不停的问我什么时候回家，我说国庆放了假就回去，她说你过年离开家都五个月了，你是去外地了吧，你不用瞒着我。我笑着说没有，我就在西安，离家很近的，放了假我马上就回来。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="杂文" scheme="http://zsqosos.github.io/tags/%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>旧日与往事</title>
    <link href="http://zsqosos.github.io/posts/life/20170625-graduation-memories/"/>
    <id>http://zsqosos.github.io/posts/life/20170625-graduation-memories/</id>
    <published>2017-06-25T14:46:15.000Z</published>
    <updated>2017-09-02T12:51:27.900Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/graduation.jpg" alt=""></p>
<p>长亭外，古道边，芳草碧连天。晚风扶柳笛声残，夕阳山外山。</p>
<p>每年的这个季节，都会有一群群青年互道告别，给陪伴了四年的好友道声珍重，然后像一名战士一样踏上新的征程。而在去年，我正是他们中的一个。<a id="more"></a></p>
<p>去年的这个时候，离毕业离校已不剩十天，毕业后的事情也都已安排妥当，所以除了白天拍毕业照之外，也别无他事，每天一块喝酒吹牛逼自然就成了我们缅怀大学生活以及互道告别的方式。那时候我们每晚都会在楼下小商店买很多辣条，抱两箱啤酒回宿舍，三个宿舍的人凑在一起吃吃喝喝，喝到兴头，还要玩一玩“逛三园”这种老把戏，在酒精的刺激下，混沌的大脑早已跟不上急需快速吐词的嘴，这时候喝多的人嘴里总会冒出“土铃薯”、“马龙果”之类的新新词汇，这些从不曾听说过的奇特物种总能惹得一众傻逼捧腹大笑，宿舍里也充满快活的空气，只有在这种欢乐的气氛下我才能暂时忘掉将要离别的不舍。我是一个不善表达感情的人，即使和自己最亲近的人，也羞于去表达自己内心的情感。到了毕业，即便内心有伤感的情绪，也要强装镇定，表现出一副满不在乎的样子。我曾经甚至认为离别时的伤感像是一种矫情，大老爷们离别应该有那种“莫愁前路无知己，天下谁人不识君”的豪迈，但当真正到了要离开的时候，我的豪迈也找不到了，真正的感情是控制不了的。</p>
<p>最后一次班级聚餐，大家都喝了很多酒，彼此诉说着离别的祝福，说出四年都不曾说出口的话，在班服上互留签名，起身互换拥抱。一切都是那么的自然，离别的情绪在此刻凝聚成一个奇点，而这种情绪继续发酵的结果就是奇点的崩塌与无限扩大。我一直觉得自己有宠辱不惊的气概，但是当一同住了四年的兄弟趴在饭桌上哭的像个傻逼的时候，我那心头的酸楚竟如洪水决了堤，一瞬间将我那份豪气冲的一干二净。这时候我才意识到，我们半夜一起翻墙去唱歌，一起上夜机打英雄联盟，翘课让下铺的兄弟替答到，窝在宿舍打游戏让隔壁兄弟带饭的日子都已经成为了过去，曾经的日子就这么结束了。是的，一切就这样结束了。</p>
<p>毕业前最后一次喝酒是在老朱过生日的时候，也就是一年前的今天。犹记得那天，二十多个人在老板店外面分好几桌坐下，喝着啤酒撸着串，和同窗四年的好友吹着牛逼，扯着过去的回忆，谈着憧憬的未来。可惜欢乐的时光总是那么短暂，酒还没有喝完，煮熟的菜还没吃完，想要说的话还没说完，老板就告诉我们该散场了，就如同我们还没想走出校园，但青春就已经散场了一样。那天晚上，有人喝的走不动道，有人喝的嘴里语无伦次，而我那天一直十分清醒，回去的路上搀扶着喝醉的兄弟，把同行的女同学送到宿舍楼下，回到宿舍安顿好喝醉的兄弟，自己躺在床上的时候，我却很想大醉一场，或许酒精可以让我麻醉，不再去想离别的忧伤。</p>
<p>离校的前几天，我出门去寄放行李，回来的路上碰上一些有趣的事情，憋了一肚子话想回到宿舍说，回去推开门却发现宿舍里空无一人，诺大的房间只剩光溜溜的床板和整好的行李，当时的我仿佛吃了一记闷棍。我想我今生都不会再有当时那种失落了吧。</p>
<p>日子一天天过去，时间并没有因为我们伟大的革命友谊而停留。七月份，学校也发出了最后离校的期限，我们仿佛一个个尚未成年的孩子，而父母却已发出最后通牒要我们走出家门去自寻生路。当时还在感慨母校为何如此无情，不能让我们多待几日。现在发现这不过是最普通规律，有聚就会有散，从踏入校园的那天起，就注定会有离开的一天。我们就像是一批批过客，离开的时候，除了回忆，留不下任何东西。而母校就是一张温床，它给了我们很多庇护，但最终我们还是要走出那张温床，自己去面对江湖上的刀光剑影。</p>
<p>毕业至今已有一年时间，而往事却依旧历历在目，这一年恍如一场梦，梦醒来就已如此。一年时间，并不算长，但足以改变很多事，以前常去吃的饭馆不知搬去了哪里。曾经最熟悉的英雄，技能也变得不认识。有的人慢慢失去了联系，也有一些新朋友走进了我的生活。但无论如何，我很感谢所有在我人生里出现过的人，感谢你们留给我的美好回忆。如今，我还在为自己的追求苦苦挣扎，身边的朋友也都在为了未来而努力。毕业一年了，朋友，但愿你们都能过得更好，可以早日实现自己的梦想。我是一个不善于主动的人，如果我没有主动联系你，我想给你说声抱歉，我从来没有忘记过你，我会试着慢慢改变，去主动联系你，但希望在没联系你的日子里，你别忘了我。人生的路还长，我希望我未来的人生处处有你。</p>
<p>——2017年6月25日夜</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/graduation.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;长亭外，古道边，芳草碧连天。晚风扶柳笛声残，夕阳山外山。&lt;/p&gt;
&lt;p&gt;每年的这个季节，都会有一群群青年互道告别，给陪伴了四年的好友道声珍重，然后像一名战士一样踏上新的征程。而在去年，我正是他们中的一个。
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="旧事" scheme="http://zsqosos.github.io/tags/%E6%97%A7%E4%BA%8B/"/>
    
  </entry>
  
  <entry>
    <title>大白话谈互联网协议</title>
    <link href="http://zsqosos.github.io/posts/program/20170519-internet-protocol/"/>
    <id>http://zsqosos.github.io/posts/program/20170519-internet-protocol/</id>
    <published>2017-05-19T14:17:54.000Z</published>
    <updated>2017-07-22T13:48:07.264Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/internetProtocol/internetProtocol.png" alt=""></p>
<h2 id="你的问题"><a href="#你的问题" class="headerlink" title="你的问题"></a>你的问题</h2><p>在这个宁肯不吃一顿饭，不可断一小时网的时代里，我们对网络的依赖已经达到了无以复加的地步，虽然我们每天在使用网络，却并不清楚网络通讯到底是如何进行的？</p>
<p>比如，你在微信里给苦追了好久的姑娘发送了一条约会消息，她收到了，并且在微信上回复给你“不好意思，我今晚有约了”，但是这可能是个误会，你发送的消息为什么可以成功到达她的手机上，而不是被远在大洋彼岸的川普收到呢？她在手机上看到这条消息后，回复给你一条拒绝的消息，这条消息也准确无误的被你所接收，本来打算和姑娘一块看电影的计划泡汤了，虽然你这时候心情很糟，但你也无事可做，所以打算研究研究这该死的网络通讯协议。看看为什么你发给妹子的消息没有发到川普的手机上。<a id="more"></a></p>
<h2 id="简单分析"><a href="#简单分析" class="headerlink" title="简单分析"></a>简单分析</h2><p>我们先来看看你给姑娘发送消息这一过程，它的背后到底发生了什么。首先，你编辑了一条消息，点击了发送按钮，这时这条消息会被经过包装，然后发送至腾讯的服务器上，包装的过程中，会把发送人、接收人、消息内容等等信息整合在一起，腾讯的服务器接收的这条信息之后，对应的程序就会对这条消息进行处理计算，从而得知要把什么内容发送给什么人，然后服务器也将这一信息进行包装处理，发送出去，之后姑娘收到消息。这只是一个简单的消息传递流程，要想真正搞清楚消息是怎么发送的，还需要了解互联网通讯的原理。</p>
<h2 id="协议"><a href="#协议" class="headerlink" title="协议"></a>协议</h2><p>首先我们要知道协议是什么？其实很简单，协议其实就是一种规则。比如在社会中，我们有法律来约束每个人的行为，法律就可以看做是一种面向公民的“协议”。在互联网上我们同样需要一些规则来约束各个主机设备或程序的行为，那么这个规则就是互联网协议。接下来我们会介绍互联网分层模型，互联网的每一层都有其特定的功能，要实现这特定的功能就要有对应的协议。</p>
<h2 id="互联网分层模型"><a href="#互联网分层模型" class="headerlink" title="互联网分层模型"></a>互联网分层模型</h2><p>为了便于理解，我们一般可以将互联网通讯模型分为五层，每个层都有它自己的功能。物理层是最底层，应用层是最高层，中间分别是链路层、网络层和传输层，其每一层都是建立在上一层的基础上的。</p>
<p><img src="/assets/blogImg/internetProtocol/1.png" alt="osi七层模型可理解为五层模型"></p>
<h3 id="（一）物理层"><a href="#（一）物理层" class="headerlink" title="（一）物理层"></a>（一）物理层</h3><p>你想给姑娘发送一条消息，首先你得有个手机（这TM不是废话），其次，你的手机得连上网（这TM也是废话），或许你这条消息是用电脑版的微信发送的，那无论你是插网线还是连WIFI，都需要你成功接入互联网。</p>
<p><img src="/assets/blogImg/internetProtocol/2.png" alt=""></p>
<p>这些连接线路就是互联网的物理层，物理层主要功能是提供了数据传输的介质，使得电信号可以在设备之间传播，这里的电信号也可以简单的理解为0或1。</p>
<h3 id="（二）链路层"><a href="#（二）链路层" class="headerlink" title="（二）链路层"></a>（二）链路层</h3><p>物理层为我们提供了在两台设备之间传输0和1的可能，但是只是单纯的传输0和1是没有意义的。链路层的作用是将这些01信号序列化，转化为有意义的数据帧。</p>
<p>那么链路层是怎么工作的呢？它工作过程大概可以理解为三个部分，发送什么数据？发送给谁？怎么发送？</p>
<ol>
<li><p>首先需要有一个规则来定义这些01电信号，使得这些电信号变得有意义，这个规则就是<a href="https://en.wikipedia.org/wiki/Ethernet" target="_blank" rel="external">以太网协议（Ethernet）</a>，它规定了一组电信号为一个数据包，每个数据包都分标头(head)和数据(data)。标头用来存储发送人、接收人、数据类型等等，数据部分就是消息内容。这就解决了发送什么消息的问题。</p>
</li>
<li><p>定义好了数据，我们就该考虑发送给谁的问题了，每台设备都有自己的一个地址，叫做<a href="https://en.wikipedia.org/wiki/MAC_address" target="_blank" rel="external">MAC地址</a>。MAC地址在设备出厂时就已经固定了，这个地址在全世界是独一无二的，这样我们就可以通过这个地址去向目标设备发送数据。</p>
</li>
<li><p>虽然我们知道了目标设备的MAC地址，但是怎么才能把把消息准确的发送给目标设备呢？其实解决方法很简单，发送数据时，将向网络中所有设备都发送这个消息，然后每一台设备自己来判断数据标头中包含的MAC地址是否和自己的MAC地址一致，如果一致就接收这个消息，如果不一致就不接收。这种发送数据的方式叫做“广播”。通过“广播”的方式就可以把一条数据发送到指定设备上了。</p>
</li>
</ol>
<p><img src="/assets/blogImg/internetProtocol/3.png" alt=""></p>
<p>好了，让我们再来看看发送数据这个过程，如我们上面所说，你想给姑娘发送一条消息，得通过通讯线缆传输0或1这种信号，然后有一种叫以太网协议的东西可以帮你把01信号转化为有意义的数据，之后你的手机向网络中所有设备发出这条消息，姑娘的手机发现这条数据是发给她的，便接受了这条数据，其他人的设备发现数据中包含的MAC地址和自己的MAC地址不符合，说明这条数据是发送给其他人的，便不接收这条数据。这样便达到了发送给姑娘消息的效果。</p>
<h3 id="（三）网络层"><a href="#（三）网络层" class="headerlink" title="（三）网络层"></a>（三）网络层</h3><p>我们知道全球的可联网设备都在一个巨型网络下，按我们上面所说，你的消息会发送给网络内所有设备，这么说来你的这条消息还是发给川普了嘛，只是人家没有接收而已。其实，并非如此，如果每发送一条消息都会发送给互联网上的所有人，那以互联网这么大的体量，早就瘫痪了。</p>
<p>实际上，“广播”的方式只能在同一子网络内发送数据，互联网是由非常多的子网络组成的巨型网络，所以你发给姑娘的消息川普是绝对收不到的。</p>
<p>看到这里你肯定已经明白了，网络层的作用是可以让数据在不同子网络之间也可以传递。最常见的网路层通讯协议就是IP协议。</p>
<h4 id="3-1-IP地址"><a href="#3-1-IP地址" class="headerlink" title="3.1 IP地址"></a>3.1 IP地址</h4><p>虽然每台设备都有自己独有的MAC地址，但是通过MAC地址我们是无法判断该设备是属于那个子网络的，所以我们引入了一种其他的地址，叫做IP地址，也称为“网址”。目前最常使用的是IPv4，是IP协议的第四版。IPv4规定网址是由32位二进制数组成，通常以四段10进制数表示，从0.0.0.0到255.255.255.255，例如：192.168.1.1就是一个IPv4地址。</p>
<h4 id="3-2-子网掩码"><a href="#3-2-子网掩码" class="headerlink" title="3.2 子网掩码"></a>3.2 子网掩码</h4><p>有了两台设备的IP地址，我们该如何判断两台设备是不是处在同一子网络下呢？这时候就需要另外一种叫做“子网掩码”的参数了，“子网掩码”同IP地址十分类似，也是由32位二进制数组成，不过它的网络部分全部为1，主机部分全部为0，那么什么是网络部分？什么是主机部分呢？</p>
<p>举例来说，IP地址为192.168.1.1，子网掩码为“255.255.255.0”，就表示此IP的前24位为网络部分，后8位为主机部分。也就是说通过“子网掩码”可以确定一个IP地址的网络部分和主机部分。那么问题就变得简单了，如果两台设备的IP地址网络部分是相同的，那么他们就处在同一子网络。</p>
<p>例如：A设备的IP地址为172.12.214.3，子网掩码为255.255.0.0，B设备的IP地址为172.12.213.1，子网掩码同为255.255.0.0，则可以判断出A设备与B设备处在同一子网络下。</p>
<h4 id="3-3-相同子网络间的数据传输"><a href="#3-3-相同子网络间的数据传输" class="headerlink" title="3.3 相同子网络间的数据传输"></a>3.3 相同子网络间的数据传输</h4><p>好了，看起来费了好大的劲来判断两台设备是不是处于同一网络下，但是相信我，费这么大功夫是绝对值得的。我们马上就可以在互联网上任意两台设备间发送数据了。首先我们要了解，我们想要发送数据，就必须知道目标设备的IP地址和MAC地址。</p>
<p>通过IP协议，我们可以判断出要传输数据的两台设备是否是在同一子网络，那现在就会有两种情况，第一种情况是，两台设备处在同一子网络下，那我们就可以利用“广播”方式去发送数据了，但是问题来了，知道目标设备的IP地址，如何获得目标的MAC地址呢？这时候ARP协议就登场了。</p>
<p>ARP协议的作用可以简单的认为是通过IP地址来获取同一子网络中设备的MAC地址，那它是如何工作的，其实也很简单，它也是通过“广播”的方式向子网络内所有设备发送一条数据包，数据包中的MAC地址填写为：FF:FF:FF:FF:FF:FF，这样当其他设备收到这条数据的时候，就会对比自身的IP与数据包中的IP是否一致，若不一致就丢弃这条数据，若一致就接收这一条数据，并汇报自己的MAC地址，这样就可以通过IP地址获取到MAC地址了。</p>
<p>现在我们就可以在两台设备（同一子网络）间通讯了。</p>
<h4 id="3-4-不同子网络间的数据传输"><a href="#3-4-不同子网络间的数据传输" class="headerlink" title="3.4 不同子网络间的数据传输"></a>3.4 不同子网络间的数据传输</h4><p>第二种情况是，要传输数据的两台设备，不在同一子网络下，我们知道，要想把数据准确发送到目标设备中，就必须知道两个地址</p>
<ul>
<li>目标设备的IP地址</li>
<li>目标设备的MAC地址</li>
</ul>
<p>但是，不同子网络间的两台设备，是无法获取到对方的MAC地址的，这时候只能将数据包发送给网关，网关通过路由协议再将数据发送到目标设备上。所以这时候需要知道的地址就变成了</p>
<ul>
<li>目标设备的IP地址</li>
<li>网关的MAC地址</li>
</ul>
<p><img src="/assets/blogImg/internetProtocol/4.jpg" alt=""></p>
<p>如图，主机2想向主机4发送一条数据，必须先将数据发送至网关A，由网关A通过路由协议查询到主机4处于子网络B，网关A会将数据发送给网关B，网关B再将数据发送给主机4，这样便完成了主机2到主机4之间的通讯。</p>
<p>至此，我们应该清楚了，在两台设备间通讯所必须的条件，首先我们需要判断两台设备是否处在同一子网络中，若在同一子网络，就可以利用ARP协议来获取MAC地址，得到目标IP和MAC地址，就可以发送数据。若不在同一子网络，则需要获取网关的MAC地址，将数据发送到网关，让网关来转发。现在我们就可以在互联网上任意两台设备间通讯了。</p>
<h3 id="（四）传输层"><a href="#（四）传输层" class="headerlink" title="（四）传输层"></a>（四）传输层</h3><p>通过上面的介绍，我们已经知道了两台设备之间是如何通讯的了，但是，当你收到姑娘回给你微信消息的同时，你的手机还在线播放着久石让的《summer》，那么问题又来了，你的手机同时接收着两种数据，那系统为什么不会把微信的数据和网易云音乐的数据搞混呢？</p>
<p>不同的应用程序在主机上发送或接收数据，都要通过不同的端口（port），以此来确定数据包是归那个应用程序所有。</p>
<p>传输层的作用就是定义了端口到端口之间的通讯，最常用的协议是TCP协议。这个协议比较复杂，它可以保证数据不会丢失。常说的“三次握手”和“四次挥手”就是指TCP协议的建立和断开，有时间的朋友可以更加深入的了解了解TCP协议。</p>
<h3 id="（五）应用层"><a href="#（五）应用层" class="headerlink" title="（五）应用层"></a>（五）应用层</h3><p>虽然各个应用程序都能拿到自己对应的数据，但是如果不对这些数据进行规范，应用程序也无法解读。所以在应用层出现很多协议，用来为应用程序提供特定的数据服务接口，这些服务包括文件传输、文件管理以及电子邮件的信息处理等。例如浏览网页需要HTTP协议、下载文件需要FTP协议，读取邮件需要POP3协议等等。</p>
<p>最后，我们在来看一张图，想一下互联网每一层都主要做了什么</p>
<p><img src="/assets/blogImg/internetProtocol/5.png" alt=""></p>
<h2 id="数据形式"><a href="#数据形式" class="headerlink" title="数据形式"></a>数据形式</h2><p>在这个五层模型中，每一层都有其对应的数据，物理层的数据就是0和1，链路层将0和1序列化定义为“帧”，“帧”分为标头和数据两部分。网络层的数据为IP数据包，它也有头部和数据两部分，IP数据包是放在帧的数据部分中的。传输层中的TCP数据包也分为头部和数据两部分，它放在IP数据包的数据部分。应用层的数据直接放在TCP数据包的数据部分。所以最终的数据形式就变成了以下形式</p>
<p><img src="/assets/blogImg/internetProtocol/6.png" alt=""></p>
<p>分层来看的话如下</p>
<p><img src="/assets/blogImg/internetProtocol/7.jpg" alt=""></p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>这片文章只是从基础的角度简单的介绍了互联网通讯的大概原理，其中简化了很多部分，实际通讯过程要比文章所写复杂的多，要想弄清楚详细的互联网通讯过程，还需要对各个协议做更加深入的学习。文章参考了阮一峰老师的<a href="http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html" target="_blank" rel="external">互联网协议入门</a>，阮老师这两篇文章通俗易懂，是互联网协议入门的不二之选，本文若有描述不清楚的地方，大家可去阅读阮老师的互联网协议入门。本文是在初步学习了互联网协议之后，自己做的一些总结，文中若有不对之处，欢迎指正。</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/internetProtocol/internetProtocol.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;你的问题&quot;&gt;&lt;a href=&quot;#你的问题&quot; class=&quot;headerlink&quot; title=&quot;你的问题&quot;&gt;&lt;/a&gt;你的问题&lt;/h2&gt;&lt;p&gt;在这个宁肯不吃一顿饭，不可断一小时网的时代里，我们对网络的依赖已经达到了无以复加的地步，虽然我们每天在使用网络，却并不清楚网络通讯到底是如何进行的？&lt;/p&gt;
&lt;p&gt;比如，你在微信里给苦追了好久的姑娘发送了一条约会消息，她收到了，并且在微信上回复给你“不好意思，我今晚有约了”，但是这可能是个误会，你发送的消息为什么可以成功到达她的手机上，而不是被远在大洋彼岸的川普收到呢？她在手机上看到这条消息后，回复给你一条拒绝的消息，这条消息也准确无误的被你所接收，本来打算和姑娘一块看电影的计划泡汤了，虽然你这时候心情很糟，但你也无事可做，所以打算研究研究这该死的网络通讯协议。看看为什么你发给妹子的消息没有发到川普的手机上。
    
    </summary>
    
      <category term="程序" scheme="http://zsqosos.github.io/categories/program/"/>
    
    
      <category term="网络协议" scheme="http://zsqosos.github.io/tags/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/"/>
    
  </entry>
  
  <entry>
    <title>三月的北京</title>
    <link href="http://zsqosos.github.io/posts/life/20170320-beijing-in-march/"/>
    <id>http://zsqosos.github.io/posts/life/20170320-beijing-in-march/</id>
    <published>2017-03-20T12:48:38.000Z</published>
    <updated>2017-09-02T14:27:57.200Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/assets/blogImg/beijngMarch.jpg" alt="春意"></p>
<p>漫天飞舞的柳絮，化作缕缕思绪，飘进了我的心<br>初来北京，虽说正值春日，但除了每日的工作和学习，还未曾出门踏踏青<br>我并不是一个喜欢游玩的人，但出门看到一番好景致自会让人心情大好<br>看着眼前的场景，我想，三月的北京和别处一样，似乎又不一样<br>玉渊潭那熙熙攘攘的赏花者和别处并没什么不同，连园子里的花也和别处一样，但这里的热闹却是别处没有的<br>我来的正是时候，有幸目睹今年盛开的樱花</p>
<p>桥下开樱桂，春来惹人回<br>今日花开倦，不见故人归<br><a id="more"></a></p>
<p>三月的北京很柔弱，处处都是一副惹人怜的模样<br>路边轻摆的杨柳<br>湖上悠悠的小船<br>还有街上那美丽的姑娘</p>
<p>三月的北京也很豪壮<br>有胡同里一口京腔骂仗的少年<br>也有紫禁城宏伟壮阔的雄景<br>更有无数人为之努力的梦想</p>
<p>在这座城里<br>每天都有人为了生活而奔波<br>也有人为了梦想而奋斗<br>有人在这里看到了无尽的黑暗<br>也有人在这里看到了希望之光<br>我想人生的意义可能不在于得到什么，而在于做了什么<br>三月的北京是什么？<br>是美景<br>也是希望</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;img src=&quot;/assets/blogImg/beijngMarch.jpg&quot; alt=&quot;春意&quot;&gt;&lt;/p&gt;
&lt;p&gt;漫天飞舞的柳絮，化作缕缕思绪，飘进了我的心&lt;br&gt;初来北京，虽说正值春日，但除了每日的工作和学习，还未曾出门踏踏青&lt;br&gt;我并不是一个喜欢游玩的人，但出门看到一番好景致自会让人心情大好&lt;br&gt;看着眼前的场景，我想，三月的北京和别处一样，似乎又不一样&lt;br&gt;玉渊潭那熙熙攘攘的赏花者和别处并没什么不同，连园子里的花也和别处一样，但这里的热闹却是别处没有的&lt;br&gt;我来的正是时候，有幸目睹今年盛开的樱花&lt;/p&gt;
&lt;p&gt;桥下开樱桂，春来惹人回&lt;br&gt;今日花开倦，不见故人归&lt;br&gt;
    
    </summary>
    
      <category term="生活" scheme="http://zsqosos.github.io/categories/life/"/>
    
    
      <category term="杂文" scheme="http://zsqosos.github.io/tags/%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>两种最常用的Sticky footer布局方式</title>
    <link href="http://zsqosos.github.io/posts/program/20170308-stickyfooter/"/>
    <id>http://zsqosos.github.io/posts/program/20170308-stickyfooter/</id>
    <published>2017-03-08T11:22:52.000Z</published>
    <updated>2017-07-22T13:48:34.380Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Sticky-footer布局是什么？"><a href="#Sticky-footer布局是什么？" class="headerlink" title="Sticky footer布局是什么？"></a>Sticky footer布局是什么？</h2><p>我们所见到的大部分网站页面，都会把一个页面分为头部区块、内容区块和页脚区块，当头部区块和内容区块内容较少时，页脚能固定在屏幕的底部，而非随着文档流排布。当页面内容较多时，页脚能随着文档流自动撑开，显示在页面的最底部，这就是Sticky footer布局。</p>
<h2 id="图示说明"><a href="#图示说明" class="headerlink" title="图示说明"></a>图示说明</h2><ul>
<li>当内容较少时，正常的文档流效果如下图</li>
</ul>
<p><img src="/assets/blogImg/stickyFooter1.jpg" alt="正常文档流.jpg"></p>
<p>在正常的文档流中，页面内容较少时，页脚部分不是固定在视窗底部的，这时就要用到Stickyfooter布局。<a id="more"></a></p>
<ul>
<li>Sticky footer布局效果如下图</li>
</ul>
<p><img src="/assets/blogImg/stickyFooter2.jpg" alt="Sticky footer布局.jpg"></p>
<p>这样就符合我们的预期效果，可以看出Sticky footer布局的应用场景还是非常广泛的。</p>
<h2 id="实现方式"><a href="#实现方式" class="headerlink" title="实现方式"></a>实现方式</h2><h3 id="负margin布局方式"><a href="#负margin布局方式" class="headerlink" title="负margin布局方式"></a>负margin布局方式</h3><p>html代码：</p>
<figure class="highlight html"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"wrapper clearfix"</span>&gt;</span></div><div class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"content"</span>&gt;</span></div><div class="line">      // 这里是页面内容</div><div class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></div><div class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></div><div class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"footer"</span>&gt;</span></div><div class="line">    // 这里是footer的内容</div><div class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></div></pre></td></tr></table></figure>
<p>css代码：<br><figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line"><span class="selector-class">.wrapper</span> &#123;</div><div class="line">    <span class="attribute">min-height</span>: <span class="number">100%</span>;</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="selector-class">.wrapper</span> <span class="selector-class">.content</span>&#123;</div><div class="line">    <span class="attribute">padding-bottom</span>: <span class="number">50px</span>; <span class="comment">/* footer区块的高度 */</span></div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="selector-class">.footer</span> &#123;</div><div class="line">    <span class="attribute">position</span>: relative;</div><div class="line">    <span class="attribute">margin-top</span>: -<span class="number">50px</span>;  <span class="comment">/* 使footer区块正好处于content的padding-bottom位置 */</span></div><div class="line">    <span class="attribute">height</span>: <span class="number">50px</span>;</div><div class="line">    <span class="attribute">clear</span>: both;</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="selector-class">.clearfix</span><span class="selector-pseudo">::after</span> &#123;</div><div class="line">    <span class="attribute">display</span>: block;</div><div class="line">    <span class="attribute">content</span>: <span class="string">"."</span>;</div><div class="line">    <span class="attribute">height</span>: <span class="number">0</span>;</div><div class="line">    <span class="attribute">clear</span>: both;</div><div class="line">    <span class="attribute">visibility</span>: hidden;</div><div class="line">&#125;</div></pre></td></tr></table></figure></p>
<blockquote>
<p>注意:<code>content</code>元素的<code>padding-bottom</code>、<code>footer</code>元素的高度以及<code>footer</code>元素的<code>margin-top</code>值必须要保持一致。</p>
</blockquote>
<p>这种负margin的布局方式，是兼容性最佳的布局方案，各大浏览器均可完美兼容，适合各种场景，但使用这种方式的前提是必须要知道<code>footer</code>元素的高度，且结构相对较复杂。</p>
<h3 id="flex布局方式"><a href="#flex布局方式" class="headerlink" title="flex布局方式"></a>flex布局方式</h3><p>html代码：</p>
<figure class="highlight html"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"wrapper"</span>&gt;</span></div><div class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"content"</span>&gt;</span>这里是主要内容<span class="tag">&lt;/<span class="name">div</span>&gt;</span></div><div class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"footer"</span>&gt;</span>这是页脚区块<span class="tag">&lt;/<span class="name">div</span>&gt;</span></div><div class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></div></pre></td></tr></table></figure>
<p>css代码：</p>
<figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line"><span class="selector-class">.wrapper</span> &#123;</div><div class="line">    <span class="attribute">display</span>: flex;</div><div class="line">    <span class="attribute">flex-direction</span>: column;</div><div class="line">    <span class="attribute">min-height</span>: <span class="number">100vh</span>;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.content</span> &#123;</div><div class="line">    <span class="attribute">flex</span>: <span class="number">1</span>;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.footer</span> &#123;</div><div class="line">    <span class="attribute">flex</span>: <span class="number">0</span>;</div><div class="line">&#125;</div></pre></td></tr></table></figure>
<p>这中布局方式结构简单，代码量少，也是较为推荐的布局方式。</p>
<h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>Sticky footer布局是十分常见的一种页面布局形式，实现的手段也比较多，以上两种方法最为常用，且基本可以满足所有应用场景。</p>
]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;Sticky-footer布局是什么？&quot;&gt;&lt;a href=&quot;#Sticky-footer布局是什么？&quot; class=&quot;headerlink&quot; title=&quot;Sticky footer布局是什么？&quot;&gt;&lt;/a&gt;Sticky footer布局是什么？&lt;/h2&gt;&lt;p&gt;我们所见到的大部分网站页面，都会把一个页面分为头部区块、内容区块和页脚区块，当头部区块和内容区块内容较少时，页脚能固定在屏幕的底部，而非随着文档流排布。当页面内容较多时，页脚能随着文档流自动撑开，显示在页面的最底部，这就是Sticky footer布局。&lt;/p&gt;
&lt;h2 id=&quot;图示说明&quot;&gt;&lt;a href=&quot;#图示说明&quot; class=&quot;headerlink&quot; title=&quot;图示说明&quot;&gt;&lt;/a&gt;图示说明&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;当内容较少时，正常的文档流效果如下图&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/assets/blogImg/stickyFooter1.jpg&quot; alt=&quot;正常文档流.jpg&quot;&gt;&lt;/p&gt;
&lt;p&gt;在正常的文档流中，页面内容较少时，页脚部分不是固定在视窗底部的，这时就要用到Stickyfooter布局。
    
    </summary>
    
      <category term="程序" scheme="http://zsqosos.github.io/categories/program/"/>
    
    
      <category term="css" scheme="http://zsqosos.github.io/tags/css/"/>
    
  </entry>
  
  <entry>
    <title>原生js实现天气查询小应用</title>
    <link href="http://zsqosos.github.io/posts/program/20170116-weather/"/>
    <id>http://zsqosos.github.io/posts/program/20170116-weather/</id>
    <published>2017-01-16T08:55:40.000Z</published>
    <updated>2017-07-22T14:18:17.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h2><p>用原生js实现了一个简单的小应用，可以用来查询全国天气，主要实现了以下两个功能</p>
<ul>
<li>点开链接时，页面自动获取当前所在城市，并显示所在城市的天气信息</li>
<li>在搜索栏搜索要查询的城市，可显示要查询城市的天气信息</li>
</ul>
<p>页面效果如下：<br><img src="/assets/blogImg/weather.jpg" alt="天气查询.jpg"></p>
<h2 id="预览"><a href="#预览" class="headerlink" title="预览"></a>预览</h2><ul>
<li><a href="https://zsqosos.github.io/weather/">在线预览</a></li>
<li><a href="https://github.com/zsqosos/weather" target="_blank" rel="external">完整代码</a></li>
</ul>
<p>请使用高级浏览器查看，预览时若速度较慢，请耐心等待<a id="more"></a></p>
<h2 id="实现原理"><a href="#实现原理" class="headerlink" title="实现原理"></a>实现原理</h2><h4 id="1-用jsonp的方式请求天气数据"><a href="#1-用jsonp的方式请求天气数据" class="headerlink" title="1.用jsonp的方式请求天气数据"></a>1.用jsonp的方式请求天气数据</h4><p>由于现有免费天气api较少，在此推荐两个api</p>
<ul>
<li><a href="http://www.nowapi.com/" target="_blank" rel="external">nowapi</a></li>
<li><a href="http://lbsyun.baidu.com/" target="_blank" rel="external">百度地图开放平台</a></li>
</ul>
<p>这两者都是可以免费使用的，nowapi的免费天气数据可以提供未来7天天气数据，百度地图的api可以提供当前所在地理位置及当日天气详情，结合使用基本可以满足个人需求</p>
<ul>
<li><p>百度天气api测试示例：<a href="http://api.map.baidu.com/telematics/v3/weather?location=西安&amp;output=json&amp;ak=FK9mkfdQsloEngodbFl4FeY3" target="_blank" rel="external">http://api.map.baidu.com/telematics/v3/weather?location=西安&amp;output=json&amp;ak=FK9mkfdQsloEngodbFl4FeY3</a></p>
</li>
<li><p>newapi天气api测试示例：<a href="[http://api.k780.com:88/?app=weather.future&amp;weaid=1&amp;&amp;appkey=10003&amp;sign=b59bc3ef6191eb9f747dd4e83c99f2a4&amp;format=json](http://api.k780.com:88/?app=weather.future&amp;weaid=1&amp;&amp;appkey=10003&amp;sign=b59bc3ef6191eb9f747dd4e83c99f2a4&amp;format=json"><a href="http://api.k780.com:88/?app=weather.future&amp;weaid=1&amp;&amp;appkey=10003&amp;sign=b59bc3ef6191eb9f747dd4e83c99f2a4&amp;format=json" target="_blank" rel="external">http://api.k780.com:88/?app=weather.future&amp;weaid=1&amp;&amp;appkey=10003&amp;sign=b59bc3ef6191eb9f747dd4e83c99f2a4&amp;format=json</a></a>)</p>
</li>
</ul>
<p>以上地址仅供测试使用，若需使用，请单独申请key。另外，以上数据接口均支持<code>https</code>，并支持<code>jsonp</code>调用</p>
<p>jsonp方式的数据请求函数</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">jsonp</span>(<span class="params">url</span>)</span>&#123;</div><div class="line">    <span class="keyword">var</span> script = <span class="built_in">document</span>.createElement(<span class="string">'script'</span>);</div><div class="line">    script.src = url;</div><div class="line">    <span class="built_in">document</span>.body.insertBefore(script, <span class="built_in">document</span>.body.firstChild);</div><div class="line">    <span class="built_in">document</span>.body.removeChild(script);</div><div class="line">&#125;</div></pre></td></tr></table></figure>
<p>将上述天气api地址传入此函数，便可得到天气数据，对于请求所需参数及返回数据格式请参考官方api文档，在此不再赘述。采用jsonp的方式可以完美解决跨域的问题，但需注意一点，使用https协议的站点也只能调用支持https的api接口</p>
<p>返回数据如下</p>
<p><img src="http://upload-images.jianshu.io/upload_images/4384107-d3fb5ecc7304a146.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="数据.jpg"></p>
<p>返回的数据为<code>json</code>格式，由于我的chrome安装了<code>JSONview</code>插件，所以可以看到格式化后的<code>json</code>数据</p>
<h4 id="2-将返回数据展示在页面上"><a href="#2-将返回数据展示在页面上" class="headerlink" title="2.将返回数据展示在页面上"></a>2.将返回数据展示在页面上</h4><p>这一步比较简单，主要是用js操作dom，将对应的数据填在页面相应的位置上，除了文字数据外，还需对天气图标进行操作，使之与天气相对应。返回的数据中已含有天气图标url，只需根据返回数据动态改变原有<code>html</code>中<code>img</code>的<code>src</code>即可。但由于以上api所提供的天气图标太丑，所以我采用了自己的天气图标来替换</p>
<h2 id="主要代码"><a href="#主要代码" class="headerlink" title="主要代码"></a>主要代码</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div></pre></td><td class="code"><pre><div class="line"><span class="comment">//调用jsonp函数请求当前所在城市</span></div><div class="line">jsonp(<span class="string">'https://api.map.baidu.com/api?v=2.0&amp;ak=Dv1NMU23dh1sGS9n2tUouDEYY96Dfzh3&amp;s=1&amp;callback=getCity'</span>);</div><div class="line"><span class="built_in">window</span>.onload=<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="comment">//请求天气车数据</span></div><div class="line">    btn.onclick=<span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">        jsonp(createUrl()[<span class="number">0</span>]);</div><div class="line">        jsonp(createUrl()[<span class="number">1</span>]);</div><div class="line">    &#125;</div><div class="line">&#125;;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">getCity</span>(<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="function"><span class="keyword">function</span> <span class="title">city</span>(<span class="params">result</span>)</span>&#123;</div><div class="line">        <span class="comment">//去掉城市名后的"市"</span></div><div class="line">        <span class="keyword">var</span> city = result.name.substring(<span class="number">0</span>,result.name.length<span class="number">-1</span>);</div><div class="line">        <span class="comment">//请求当前城市的天气数据</span></div><div class="line">        jsonp(createUrl(city)[<span class="number">0</span>]);</div><div class="line">        jsonp(createUrl(city)[<span class="number">1</span>]);</div><div class="line">    &#125;</div><div class="line">    <span class="keyword">var</span> cityName = <span class="keyword">new</span> BMap.LocalCity();</div><div class="line">    cityName.get(city);</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="comment">// 数据请求函数</span></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">jsonp</span>(<span class="params">url</span>)</span>&#123;</div><div class="line">    <span class="keyword">var</span> script = <span class="built_in">document</span>.createElement(<span class="string">'script'</span>);</div><div class="line">    script.src = url;</div><div class="line">    <span class="built_in">document</span>.body.insertBefore(script, <span class="built_in">document</span>.body.firstChild);</div><div class="line">    <span class="built_in">document</span>.body.removeChild(script);</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="comment">//数据请求成功回调函数，用于将获取到的数据放入页面相应位置</span></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">getWeather</span>(<span class="params">response</span>) </span>&#123;</div><div class="line">    <span class="keyword">var</span> oSpan = <span class="built_in">document</span>.getElementsByClassName(<span class="string">'info'</span>);</div><div class="line">    <span class="keyword">var</span> data = response.result;</div><div class="line">    oSpan[<span class="number">0</span>].innerHTML=data[<span class="number">0</span>].citynm;</div><div class="line">    oSpan[<span class="number">1</span>].innerHTML=data[<span class="number">0</span>].days;</div><div class="line">    oSpan[<span class="number">2</span>].innerHTML=data[<span class="number">0</span>].week;</div><div class="line">    oSpan[<span class="number">3</span>].innerHTML=data[<span class="number">0</span>].weather;</div><div class="line">    oSpan[<span class="number">4</span>].innerHTML=data[<span class="number">0</span>].temperature;</div><div class="line">    oSpan[<span class="number">5</span>].innerHTML=data[<span class="number">0</span>].winp;</div><div class="line">    oSpan[<span class="number">6</span>].innerHTML=data[<span class="number">0</span>].wind;</div><div class="line"></div><div class="line">    <span class="keyword">var</span> aDiv = <span class="built_in">document</span>.getElementsByClassName(<span class="string">'future_box'</span>);</div><div class="line">    <span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>; i&lt;aDiv.length; i++)&#123;</div><div class="line">        <span class="keyword">var</span> aSpan = aDiv[i].getElementsByClassName(<span class="string">'future_info'</span>);</div><div class="line">        aSpan[<span class="number">0</span>].innerHTML = data[i+<span class="number">1</span>].days;</div><div class="line">        aSpan[<span class="number">1</span>].innerHTML = data[i+<span class="number">1</span>].week;</div><div class="line">        aSpan[<span class="number">2</span>].innerHTML =data[i+<span class="number">1</span>].weather;</div><div class="line">        aSpan[<span class="number">3</span>].innerHTML = data[i+<span class="number">1</span>].temperature;</div><div class="line">    &#125;</div><div class="line"><span class="comment">//根据返回数据，替换不同天气图片</span></div><div class="line">    changeImg(response);</div><div class="line">&#125;</div><div class="line"><span class="comment">//请求今日天气详细数据回调函数</span></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">getTodayWeather</span>(<span class="params">response</span>)</span>&#123;</div><div class="line">    <span class="keyword">var</span> oSpan = <span class="built_in">document</span>.getElementsByClassName(<span class="string">'info'</span>);</div><div class="line">    <span class="keyword">var</span> data = response.results;</div><div class="line">    oSpan[<span class="number">7</span>].innerHTML=data[<span class="number">0</span>].pm25;</div><div class="line">    oSpan[<span class="number">8</span>].innerHTML=data[<span class="number">0</span>].index[<span class="number">4</span>].zs;</div><div class="line">    oSpan[<span class="number">9</span>].innerHTML=data[<span class="number">0</span>].index[<span class="number">1</span>].zs;</div><div class="line">    oSpan[<span class="number">10</span>].innerHTML=data[<span class="number">0</span>].index[<span class="number">2</span>].zs;</div><div class="line">    oSpan[<span class="number">11</span>].innerHTML=data[<span class="number">0</span>].index[<span class="number">0</span>].zs;</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="comment">//根据获取到的数据更改页面中相应的图片</span></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">changeImg</span>(<span class="params">data</span>)</span>&#123;</div><div class="line">    <span class="keyword">var</span> firstImg = <span class="built_in">document</span>.getElementsByTagName(<span class="string">"img"</span>)[<span class="number">0</span>];</div><div class="line">    <span class="keyword">var</span> firstWeatherId=data.result[<span class="number">0</span>].weatid;</div><div class="line">    chooseImg(firstWeatherId,firstImg);</div><div class="line"></div><div class="line">    <span class="keyword">var</span> aImg = <span class="built_in">document</span>.getElementById(<span class="string">'future_container'</span>).getElementsByTagName(<span class="string">'img'</span>);</div><div class="line">    <span class="keyword">for</span>(<span class="keyword">var</span> j=<span class="number">0</span>; j&lt;aImg.length; j++)&#123;</div><div class="line">        <span class="keyword">var</span> weatherId = data.result[j+<span class="number">1</span>].weatid;</div><div class="line">        chooseImg(weatherId,aImg[j]);</div><div class="line">    &#125;</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="comment">//选择图片</span></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">chooseImg</span>(<span class="params">id,index</span>)</span>&#123;</div><div class="line">    <span class="keyword">switch</span>(id)&#123;</div><div class="line">        <span class="keyword">case</span> <span class="string">'1'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/1.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">case</span> <span class="string">'2'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/2.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">case</span> <span class="string">'3'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/3.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">case</span> <span class="string">'4'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'5'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'6'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'8'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'9'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'10'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'11'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'12'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'13'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'20'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'22'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'23'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'24'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'25'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'26'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/4.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">case</span> <span class="string">'7'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/6.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">case</span> <span class="string">'14'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'15'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'16'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'17'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'18'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'27'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'28'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'29'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/5.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">case</span> <span class="string">'19'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'21'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'30'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'31'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'32'</span>:</div><div class="line">        <span class="keyword">case</span> <span class="string">'33'</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/7.png'</span>;</div><div class="line">            <span class="keyword">break</span>;</div><div class="line">        <span class="keyword">default</span>:</div><div class="line">            index.src=<span class="string">'images/weather_icon/8.png'</span>;</div><div class="line">    &#125;</div><div class="line">&#125;</div><div class="line"></div><div class="line"><span class="comment">//根据城市名创建请求数据及url</span></div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">createUrl</span>(<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="keyword">var</span> cityName = <span class="string">''</span>;</div><div class="line">    <span class="keyword">if</span>(<span class="built_in">arguments</span>.length == <span class="number">0</span>) &#123;</div><div class="line">        cityName = <span class="built_in">document</span>.getElementById(<span class="string">'text'</span>).value;</div><div class="line">    &#125;<span class="keyword">else</span>&#123;</div><div class="line">        cityName = <span class="built_in">arguments</span>[<span class="number">0</span>];</div><div class="line">    &#125;</div><div class="line">    <span class="keyword">var</span> urls = []; </div><div class="line">    urls[<span class="number">0</span>] = <span class="string">'https://sapi.k780.com/?app=weather.future&amp;appkey=10003&amp;sign=b59bc3ef6191eb9f747dd4e83c99f2a4&amp;format=json&amp;jsoncallback=getWeather&amp;weaid='</span> + <span class="built_in">encodeURI</span>(cityName);</div><div class="line">    urls[<span class="number">1</span>] = <span class="string">'https://api.map.baidu.com/telematics/v3/weather?output=json&amp;ak=FK9mkfdQsloEngodbFl4FeY3&amp;callback=getTodayWeather&amp;location='</span> + <span class="built_in">encodeURI</span>(cityName);</div><div class="line">    <span class="keyword">return</span> urls;</div><div class="line">&#125;</div></pre></td></tr></table></figure>
<p>实现过程很简单，作为自己第一个的小demo，难免有很多不足，若能得到指正或建议，我将不胜感激。</p>
]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;介绍&quot;&gt;&lt;a href=&quot;#介绍&quot; class=&quot;headerlink&quot; title=&quot;介绍&quot;&gt;&lt;/a&gt;介绍&lt;/h2&gt;&lt;p&gt;用原生js实现了一个简单的小应用，可以用来查询全国天气，主要实现了以下两个功能&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点开链接时，页面自动获取当前所在城市，并显示所在城市的天气信息&lt;/li&gt;
&lt;li&gt;在搜索栏搜索要查询的城市，可显示要查询城市的天气信息&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;页面效果如下：&lt;br&gt;&lt;img src=&quot;/assets/blogImg/weather.jpg&quot; alt=&quot;天气查询.jpg&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;预览&quot;&gt;&lt;a href=&quot;#预览&quot; class=&quot;headerlink&quot; title=&quot;预览&quot;&gt;&lt;/a&gt;预览&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zsqosos.github.io/weather/&quot;&gt;在线预览&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zsqosos/weather&quot;&gt;完整代码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请使用高级浏览器查看，预览时若速度较慢，请耐心等待
    
    </summary>
    
      <category term="程序" scheme="http://zsqosos.github.io/categories/program/"/>
    
    
      <category term="javascript" scheme="http://zsqosos.github.io/tags/javascript/"/>
    
  </entry>
  
  <entry>
    <title>关于setInterval和setTimeout中的this指向问题</title>
    <link href="http://zsqosos.github.io/posts/program/20161216-setinterval-this/"/>
    <id>http://zsqosos.github.io/posts/program/20161216-setinterval-this/</id>
    <published>2016-12-16T11:22:52.000Z</published>
    <updated>2017-07-22T13:48:29.734Z</updated>
    
    <content type="html"><![CDATA[<h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>前些天在练习写一个小例子的时候用到了定时器，发现在<code>setInterval</code>和<code>setTimeout</code>中传入函数时，函数中的<code>this</code>会指向<code>window</code>对象，如下例：<a id="more"></a></p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">var</span> num = <span class="number">0</span>;</div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">Obj</span> (<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="keyword">this</span>.num = <span class="number">1</span>,</div><div class="line">    <span class="keyword">this</span>.getNum = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">    &#125;,</div><div class="line">    <span class="keyword">this</span>.getNumLater = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        setTimeout(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">            <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">        &#125;, <span class="number">1000</span>)</div><div class="line">    &#125;</div><div class="line">&#125;</div><div class="line"><span class="keyword">var</span> obj = <span class="keyword">new</span> Obj; </div><div class="line">obj.getNum();<span class="comment">//1　　打印的为obj.num，值为1</span></div><div class="line">obj.getNumLater()<span class="comment">//0　　打印的为window.num，值为0</span></div></pre></td></tr></table></figure>
<h2 id="问题原因"><a href="#问题原因" class="headerlink" title="问题原因"></a>问题原因</h2><p>从上述例子中可以看到<code>setTimeout</code>中函数内的<code>this</code>是指向了<code>window</code>对象，这是由于<code>setTimeout()</code>调用的代码运行在与所在函数完全分离的执行环境上。 这会导致这些代码中包含的 <code>this</code> 关键字会指向 window (或全局)对象。详细可参考<a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Window/setTimeout" target="_blank" rel="external">MDN setTimeout</a></p>
<h2 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h2><p> 1.将当前对象的<code>this</code>存为一个变量，定时器内的函数利用闭包来访问这个变量，如下：</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">var</span> num = <span class="number">0</span>;</div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">Obj</span> (<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="keyword">var</span> that = <span class="keyword">this</span>;    <span class="comment">//将this存为一个变量，此时的this指向obj</span></div><div class="line">    <span class="keyword">this</span>.num = <span class="number">1</span>,</div><div class="line">    <span class="keyword">this</span>.getNum = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">    &#125;,</div><div class="line">    <span class="keyword">this</span>.getNumLater = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        setTimeout(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">            <span class="built_in">console</span>.log(that.num);    <span class="comment">//利用闭包访问that，that是一个指向obj的指针</span></div><div class="line">        &#125;, <span class="number">1000</span>)</div><div class="line">    &#125;</div><div class="line">&#125;</div><div class="line"><span class="keyword">var</span> obj = <span class="keyword">new</span> Obj; </div><div class="line">obj.getNum();<span class="comment">//1　　打印的是obj.num，值为1</span></div><div class="line">obj.getNumLater()<span class="comment">//1　　打印的是obj.num，值为1</span></div></pre></td></tr></table></figure>
<p>这种方法是将当前对象的引用放在一个变量里，定时器内部的函数来访问到这个变量，自然就可以得到当前的对象。</p>
<p>2.利用bind()方法</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">var</span> num = <span class="number">0</span>;</div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">Obj</span> (<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="keyword">this</span>.num = <span class="number">1</span>,</div><div class="line">    <span class="keyword">this</span>.getNum = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">    &#125;,</div><div class="line">    <span class="keyword">this</span>.getNumLater = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        setTimeout(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">            <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">        &#125;.bind(<span class="keyword">this</span>), <span class="number">1000</span>)    <span class="comment">//利用bind()将this绑定到这个函数上</span></div><div class="line">    &#125;</div><div class="line">&#125;</div><div class="line"><span class="keyword">var</span> obj = <span class="keyword">new</span> Obj; </div><div class="line">obj.getNum();<span class="comment">//1　　打印的是obj.num，值为1</span></div><div class="line">obj.getNumLater()<span class="comment">//1　　打印的是obj.num，值为1</span></div></pre></td></tr></table></figure>
<p><code>bind</code>方法是在<code>Function.prototype</code>上的一个方法，当被绑定函数执行时，<code>bind</code>方法会创建一个新函数，并将第一个参数作为新函数运行时的this。在这个例子中，在调用<code>setTimeout</code>中的函数时，<code>bind</code>方法创建了一个新的函数，并将this传进新的函数，执行的结果也就是正确的了。关于<code>bind</code>方法可参考 <a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind" target="_blank" rel="external">MDN bind</a></p>
<p>3.箭头函数</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">var</span> num = <span class="number">0</span>;</div><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">Obj</span> (<span class="params"></span>)</span>&#123;</div><div class="line">    <span class="keyword">this</span>.num = <span class="number">1</span>,</div><div class="line">    <span class="keyword">this</span>.getNum = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">    &#125;,</div><div class="line">    <span class="keyword">this</span>.getNumLater = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        setTimeout(<span class="function"><span class="params">()</span> =&gt;</span> &#123;</div><div class="line">            <span class="built_in">console</span>.log(<span class="keyword">this</span>.num);</div><div class="line">        &#125;, <span class="number">1000</span>)    <span class="comment">//箭头函数中的this总是指向外层调用者，也就是Obj</span></div><div class="line">    &#125;</div><div class="line">&#125;</div><div class="line"><span class="keyword">var</span> obj = <span class="keyword">new</span> Obj; </div><div class="line">obj.getNum();<span class="comment">//1　　打印的是obj.num，值为1</span></div><div class="line">obj.getNumLater()<span class="comment">//1　　打印的是obj.num，值为1</span></div></pre></td></tr></table></figure>
<p><code>ES6</code>中的箭头函数完全修复了this的指向，this总是指向词法作用域，也就是外层调用者obj，利用箭头函数就可以轻松解决这个问题。</p>
<h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>以上三种方法都是比较常用的，当然如果使用call或apply方法来代替bind方法，得到的结果也是正确的，但是call方法会在调用之后立即执行，那样也就没有了延时的效果，定时器也就没有用了，所以推荐使用上述方法来将this传进setTimeout和setInterval中。 </p>
]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;问题描述&quot;&gt;&lt;a href=&quot;#问题描述&quot; class=&quot;headerlink&quot; title=&quot;问题描述&quot;&gt;&lt;/a&gt;问题描述&lt;/h2&gt;&lt;p&gt;前些天在练习写一个小例子的时候用到了定时器，发现在&lt;code&gt;setInterval&lt;/code&gt;和&lt;code&gt;setTimeout&lt;/code&gt;中传入函数时，函数中的&lt;code&gt;this&lt;/code&gt;会指向&lt;code&gt;window&lt;/code&gt;对象，如下例：
    
    </summary>
    
      <category term="程序" scheme="http://zsqosos.github.io/categories/program/"/>
    
    
      <category term="javascript" scheme="http://zsqosos.github.io/tags/javascript/"/>
    
  </entry>
  
  <entry>
    <title>jQuery轮播图——轮播实现并封装</title>
    <link href="http://zsqosos.github.io/posts/program/20161212-jquery-carousel/"/>
    <id>http://zsqosos.github.io/posts/program/20161212-jquery-carousel/</id>
    <published>2016-12-12T11:22:52.000Z</published>
    <updated>2017-07-22T14:23:15.267Z</updated>
    
    <content type="html"><![CDATA[<h3 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h3><p>使用<code>jQuery</code>完成的简单轮播图组件，可在同一页面多个组件同时轮播。轮播图的实现过程并不复杂，但在是在封装过程中，运用到较多基础知识点，有面向对象、<code>prototype</code>继承、原型链等等。</p>
<ul>
<li>demo预览：<a href="https://zsqosos.github.io/component_library/">点此预览</a></li>
<li>代码地址： <a href="https://github.com/zsqosos/component_library/tree/master/jquery-carousel" target="_blank" rel="external">https://github.com/zsqosos/component_library/tree/master/jquery-carousel</a></li>
<li>同时发布于：<a href="http://www.cnblogs.com/zsqos/p/6126782.html" target="_blank" rel="external">博客园 | jQuery轮播图（一）轮播实现并封装</a></li>
</ul>
<a id="more"></a>
<h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><p>html:</p>
<figure class="highlight html"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"banner"</span> <span class="attr">id</span>=<span class="string">"J_bg_ban1"</span>&gt;</span></div><div class="line">　　<span class="tag">&lt;<span class="name">ul</span>&gt;</span></div><div class="line">　　　　<span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>&gt;</span><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"./img/banner_01.jpg"</span> <span class="attr">alt</span>=<span class="string">"广告图"</span>/&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></div><div class="line">　　　　<span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>&gt;</span><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"./img/banner_02.jpg"</span> <span class="attr">alt</span>=<span class="string">"广告图"</span>/&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></div><div class="line">　　　　<span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>&gt;</span><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"./img/banner_03.jpg"</span> <span class="attr">alt</span>=<span class="string">"广告图"</span>/&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></div><div class="line">　　　　<span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>&gt;</span><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"./img/banner_04.jpg"</span> <span class="attr">alt</span>=<span class="string">"广告图"</span>/&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></div><div class="line">　　　　<span class="tag">&lt;<span class="name">li</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">"#"</span>&gt;</span><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"./img/banner_05.jpg"</span> <span class="attr">alt</span>=<span class="string">"广告图"</span>/&gt;</span><span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;/<span class="name">li</span>&gt;</span></div><div class="line">　　<span class="tag">&lt;/<span class="name">ul</span>&gt;</span></div><div class="line">　　<span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"indicator"</span> <span class="attr">id</span>=<span class="string">"J_bg_indicator1"</span>&gt;</span><span class="tag">&lt;/<span class="name">div</span>&gt;</span></div><div class="line">　　<span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"ban-btn clearfloat"</span> <span class="attr">id</span>=<span class="string">"J_bg_btn1"</span>&gt;</span></div><div class="line">　　　　<span class="tag">&lt;<span class="name">a</span> <span class="attr">class</span>=<span class="string">"next-btn fr"</span> <span class="attr">href</span>=<span class="string">"javascript:"</span>&gt;</span>&amp;gt;<span class="tag">&lt;/<span class="name">a</span>&gt;</span><span class="tag">&lt;<span class="name">a</span> <span class="attr">class</span>=<span class="string">"prev-btn fl"</span> <span class="attr">href</span>=<span class="string">"javascript:"</span>&gt;</span>&amp;lt;<span class="tag">&lt;/<span class="name">a</span>&gt;</span></div><div class="line">　　<span class="tag">&lt;/<span class="name">div</span>&gt;</span></div></pre></td></tr></table></figure>
<p>css:</p>
<figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div></pre></td><td class="code"><pre><div class="line"><span class="selector-class">.banner</span> &#123;</div><div class="line">    <span class="attribute">height</span>: <span class="number">325px</span>;</div><div class="line">    <span class="attribute">width</span>: <span class="number">812px</span>;</div><div class="line">    <span class="attribute">position</span>: relative;</div><div class="line">    <span class="attribute">overflow</span>: hidden;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.banner</span> <span class="selector-tag">ul</span>&#123;</div><div class="line">    <span class="attribute">padding</span>: <span class="number">0</span>;</div><div class="line">    <span class="attribute">margin</span>: <span class="number">0</span>;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.banner</span> <span class="selector-tag">ul</span> <span class="selector-tag">li</span>&#123;</div><div class="line">    <span class="attribute">top</span>: <span class="number">0</span>;</div><div class="line">    <span class="attribute">left</span>: <span class="number">0</span>;</div><div class="line">    <span class="attribute">list-style</span>: none;</div><div class="line">    <span class="attribute">position</span>: absolute;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.banner</span> <span class="selector-tag">ul</span> <span class="selector-tag">li</span> <span class="selector-tag">img</span>&#123;</div><div class="line">    <span class="attribute">height</span>: <span class="number">325px</span>;</div><div class="line">    <span class="attribute">width</span>: <span class="number">812px</span>;</div><div class="line">    <span class="attribute">display</span>: block;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.ban-btn</span>&#123;</div><div class="line">    <span class="attribute">width</span>: <span class="number">100%</span>;</div><div class="line">    <span class="attribute">position</span>: absolute;</div><div class="line">    <span class="attribute">top</span>: <span class="number">136px</span>;</div><div class="line">    <span class="attribute">z-index</span>: <span class="number">2</span>;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.ban-btn</span> <span class="selector-tag">a</span>&#123;</div><div class="line">    <span class="attribute">display</span>: inline-block;</div><div class="line">    <span class="attribute">height</span>: <span class="number">60px</span>;</div><div class="line">    <span class="attribute">width</span>: <span class="number">35px</span>;</div><div class="line">    <span class="attribute">background</span>: <span class="built_in">rgba</span>(180,180,180,0.5);</div><div class="line">    <span class="attribute">font-size</span>: <span class="number">25px</span>;</div><div class="line">    <span class="attribute">text-align</span>: center;</div><div class="line">    <span class="attribute">line-height</span>: <span class="number">60px</span>;</div><div class="line">    <span class="attribute">color</span>: <span class="number">#fff</span>;</div><div class="line">    <span class="attribute">text-decoration</span>: none;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.next-btn</span>&#123;</div><div class="line">    <span class="attribute">float</span>: right;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.prev-btn</span>&#123;</div><div class="line">    <span class="attribute">float</span>: left;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.ban-btn</span> <span class="selector-tag">a</span><span class="selector-pseudo">:hover</span>&#123;</div><div class="line">    <span class="attribute">background</span>: <span class="built_in">rgba</span>(100, 100, 100, 0.5);</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.indicator</span>&#123;</div><div class="line">    <span class="attribute">width</span>: <span class="number">100%</span>;</div><div class="line">    <span class="attribute">position</span>: absolute;</div><div class="line">    <span class="attribute">text-align</span>: center;</div><div class="line">    <span class="attribute">bottom</span>: <span class="number">15px</span>;</div><div class="line">    <span class="attribute">z-index</span>: <span class="number">2</span>;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.indicator</span> <span class="selector-tag">a</span>&#123;</div><div class="line">    <span class="attribute">display</span>: inline-block;</div><div class="line">    <span class="attribute">width</span>: <span class="number">20px</span>;</div><div class="line">    <span class="attribute">height</span>: <span class="number">5px</span>;</div><div class="line">    <span class="attribute">margin</span>:<span class="number">0</span> <span class="number">3px</span>;</div><div class="line">    <span class="attribute">background</span>: <span class="number">#fff</span>;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.indicator-active</span>&#123;</div><div class="line">    <span class="attribute">background</span>: <span class="number">#FF8C00</span>;</div><div class="line">&#125;</div></pre></td></tr></table></figure>
<p>js:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">function</span> <span class="title">Carousel</span>(<span class="params">bannnerBox, aBox, btnBox</span>)</span>&#123;</div><div class="line">    <span class="keyword">this</span>.now = <span class="number">0</span>;                    <span class="comment">//当前显示的图片索引</span></div><div class="line">    <span class="keyword">this</span>.hasStarted = <span class="literal">false</span>；         <span class="comment">//是否开始轮播</span></div><div class="line">    <span class="keyword">this</span>.interval = <span class="literal">null</span>；            <span class="comment">//定时器</span></div><div class="line">    <span class="keyword">this</span>.liItems = <span class="literal">null</span>；             <span class="comment">//要轮播的li元素集合</span></div><div class="line">    <span class="keyword">this</span>.len = <span class="number">0</span>;                  <span class="comment">//liItems的长度</span></div><div class="line">    <span class="keyword">this</span>.aBox : <span class="literal">null</span>;                <span class="comment">//包含指示器的dom对象</span></div><div class="line">    <span class="keyword">this</span>.bBox : <span class="literal">null</span>;                <span class="comment">//包含前后按钮的dom对象</span></div><div class="line"></div><div class="line">    <span class="comment">/**</span></div><div class="line">     * 初始化及控制函数</div><div class="line">     * @param bannnerBox string 包含整个轮播图盒子的id或class</div><div class="line">     * @param aBox  string 包含指示器的盒子的id或class</div><div class="line">     * @param btnBox string 包含前后按钮的盒子的id或class</div><div class="line">     */</div><div class="line">    <span class="keyword">this</span>.init = <span class="function"><span class="keyword">function</span>(<span class="params"></span>) </span>&#123;</div><div class="line">        <span class="comment">//初始化对象参数</span></div><div class="line">        <span class="keyword">var</span> that = <span class="keyword">this</span>;</div><div class="line">        <span class="keyword">this</span>.liItems = $(bannnerBox).find(<span class="string">'ul'</span>).find(<span class="string">'li'</span>);</div><div class="line">        <span class="keyword">this</span>.len = <span class="keyword">this</span>.liItems.length;</div><div class="line">        <span class="keyword">this</span>.aBox = $(bannnerBox).find(aBox);</div><div class="line">        <span class="keyword">this</span>.bBox = $(bannnerBox).find(btnBox);</div><div class="line">        <span class="comment">//让第一张图片显示，根据轮播图数量动态创建指示器，并让第一个指示器处于激活状态，隐藏前后按钮</span></div><div class="line">        <span class="keyword">this</span>.liItems.first(<span class="string">'li'</span>).css(&#123;<span class="string">'opacity'</span>: <span class="number">1</span>, <span class="string">'z-index'</span>: <span class="number">1</span>&#125;).siblings(<span class="string">'li'</span>).css(&#123;<span class="string">'opacity'</span>: <span class="number">0</span>, <span class="string">'z-index'</span>: <span class="number">0</span>&#125;);</div><div class="line">        <span class="keyword">var</span> aDom = <span class="string">''</span>;</div><div class="line">        <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; <span class="keyword">this</span>.len; i++)&#123;</div><div class="line">            aDom += <span class="string">'&lt;a&gt;&lt;/a&gt;'</span>;</div><div class="line">        &#125;</div><div class="line">        $(aDom).appendTo(<span class="keyword">this</span>.aBox);</div><div class="line">        <span class="keyword">this</span>.aBox.find(<span class="string">'a:first'</span>).addClass(<span class="string">"indicator-active"</span>);</div><div class="line">        <span class="keyword">this</span>.bBox.hide();</div><div class="line">        <span class="comment">//鼠标移入banner图时，停止轮播并显示前后按钮，移出时开始轮播并隐藏前后按钮</span></div><div class="line">        $(bannnerBox).hover(<span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">            that.stop();</div><div class="line">            that.bBox.fadeIn(<span class="number">200</span>);</div><div class="line">        &#125;, <span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">            that.start();</div><div class="line">            that.bBox.fadeOut(<span class="number">200</span>);</div><div class="line">        &#125;);</div><div class="line">        <span class="comment">//鼠标移入指示器时，显示对应图片，移出时继续播放</span></div><div class="line">        <span class="keyword">this</span>.aBox.find(<span class="string">'a'</span>).hover(<span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">            that.stop();</div><div class="line">            <span class="keyword">var</span> out = that.aBox.find(<span class="string">'a'</span>).filter(<span class="string">'.indicator-active'</span>).index();</div><div class="line">            that.now = $(<span class="keyword">this</span>).index();</div><div class="line">            <span class="keyword">if</span>(out!=that.now) &#123;</div><div class="line">                that.play(out, that.now)</div><div class="line">            &#125;</div><div class="line">        &#125;, <span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">            that.start();</div><div class="line">        &#125;);</div><div class="line">        <span class="comment">//点击左右按钮时显示上一张或下一张</span></div><div class="line">        $(btnBox).find(<span class="string">'a:first'</span>).click(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;that.next()&#125;);</div><div class="line">        $(btnBox).find(<span class="string">'a:last'</span>).click(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;that.prev()&#125;);</div><div class="line">    &#125;;</div><div class="line">    <span class="comment">//前一张函数</span></div><div class="line">    <span class="keyword">this</span>.prev = <span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="keyword">var</span> out = <span class="keyword">this</span>.now;</div><div class="line">        <span class="keyword">this</span>.now = (--<span class="keyword">this</span>.now + <span class="keyword">this</span>.len) % <span class="keyword">this</span>.len;</div><div class="line">        <span class="keyword">this</span>.play(out, <span class="keyword">this</span>.now);</div><div class="line">    &#125;;</div><div class="line">    <span class="comment">//后一张函数</span></div><div class="line">    <span class="keyword">this</span>.next = <span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="keyword">var</span> out = <span class="keyword">this</span>.now;</div><div class="line">        <span class="keyword">this</span>.now = ++<span class="keyword">this</span>.now % <span class="keyword">this</span>.len;</div><div class="line">        <span class="keyword">this</span>.play(out, <span class="keyword">this</span>.now);</div><div class="line">    &#125;;</div><div class="line">    <span class="comment">/**</span></div><div class="line">     * 播放函数</div><div class="line">     * @param out number 要消失的图片的索引值</div><div class="line">     * @param now number 接下来要轮播的图的索引值</div><div class="line">     */</div><div class="line">    <span class="keyword">this</span>.play = <span class="function"><span class="keyword">function</span> (<span class="params">out, now</span>)</span>&#123;</div><div class="line">        <span class="keyword">this</span>.liItems.eq(out).stop().animate(&#123;<span class="attr">opacity</span>:<span class="number">0</span>,<span class="string">'z-index'</span>:<span class="number">0</span>&#125;,<span class="number">500</span>).end().eq(now).stop().animate(&#123;<span class="attr">opacity</span>:<span class="number">1</span>,<span class="string">'z-index'</span>:<span class="number">1</span>&#125;,<span class="number">500</span>);</div><div class="line">        <span class="keyword">this</span>.aBox.find(<span class="string">'a'</span>).removeClass(<span class="string">'indicator-active'</span>).eq(now).addClass(<span class="string">'indicator-active'</span>);</div><div class="line">    &#125;;</div><div class="line">    <span class="comment">//开始函数</span></div><div class="line">    <span class="keyword">this</span>.start = <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">        <span class="keyword">if</span>(!<span class="keyword">this</span>.hasStarted) &#123;</div><div class="line">            <span class="keyword">this</span>.hasStarted = <span class="literal">true</span>;</div><div class="line">            <span class="keyword">var</span> that = <span class="keyword">this</span>;</div><div class="line">            <span class="keyword">this</span>.interval = setInterval(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">                that.next();</div><div class="line">            &#125;,<span class="number">2000</span>);</div><div class="line">        &#125;</div><div class="line">    &#125;;</div><div class="line">    <span class="comment">//停止函数</span></div><div class="line">    <span class="keyword">this</span>.stop = <span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;</div><div class="line">        clearInterval(<span class="keyword">this</span>.interval);</div><div class="line">        <span class="keyword">this</span>.hasStarted = <span class="literal">false</span>;</div><div class="line">    &#125;</div><div class="line">    <span class="comment">// 初始化</span></div><div class="line">    <span class="keyword">this</span>.init();</div><div class="line">    <span class="comment">// 开始轮播</span></div><div class="line">    <span class="keyword">this</span>.start();</div><div class="line">&#125;;</div></pre></td></tr></table></figure>
<p>调用时采用<code>new</code>操作符，如下：</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">var</span> banner1 = <span class="keyword">new</span> Carousel(<span class="string">'#J_bg_ban1'</span>,<span class="string">'#J_bg_indicator1'</span>,<span class="string">'#J_bg_btn1'</span>);</div><div class="line"><span class="keyword">var</span> banner2 = <span class="keyword">new</span> Carousel(<span class="string">'#J_bg_ban2'</span>,<span class="string">'#J_bg_indicator2'</span>,<span class="string">'#J_bg_btn2'</span>);</div></pre></td></tr></table></figure>
<h3 id="存在问题"><a href="#存在问题" class="headerlink" title="存在问题"></a>存在问题</h3><p>这里使用了构造函数来实现继承，上述代码虽然可以实现轮播需求，但是仔细分析发现，每次使用new操作符都会根据构造函数构建出造出一个新的实例对象，那就存在内部函数不能复用的缺点，这也是单独使用构造函数来自定义对象不可避免的。</p>
<p>在Carousel对象内的play方法、next方法、prev方法、strat方法、stop方法其实都是可以共用的，多个轮播件共用这些函数是完全没有问题的，而init初始化方法需要在每个实例上单独创建。单独使用构造函数创建对象，在使用new操作符创建新实例的时候，init初始化方法会被重新在每个实例上创建一遍，这正是我们想要的结果，而play方法、next方法、prev方法、start方法、stop方法这些可共用的方法也会在新实例上被重新创建，而创造多个完成一样任务的方法是完全没有必要的，所以需要将这些共有的方法提出来，让所有Carousel对象的实例都可以公用，这样就可以解决函数复用的问题。</p>
<h3 id="改进"><a href="#改进" class="headerlink" title="改进"></a>改进</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div></pre></td><td class="code"><pre><div class="line"><span class="comment">// 构造函数加原型形式</span></div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line">  * 构造函数初始化及开始轮播</div><div class="line">  * @param bannnerBox string 包含整个轮播图盒子的id或class</div><div class="line">  * @param aBox  string 包含指示器的盒子的id或class</div><div class="line">  * @param btnBox string 包含前后按钮的盒子的id或class</div><div class="line">  */</div><div class="line"> <span class="function"><span class="keyword">function</span> <span class="title">Carousel</span>(<span class="params">bannnerBox, aBox, btnBox</span>) </span>&#123;</div><div class="line">     <span class="keyword">this</span>.now = <span class="number">0</span>; <span class="comment">//当前显示的图片索引</span></div><div class="line">     <span class="keyword">this</span>.hasStarted = <span class="literal">false</span>; <span class="comment">//是否开始轮播</span></div><div class="line">     <span class="keyword">this</span>.interval = <span class="literal">null</span>; <span class="comment">//定时器</span></div><div class="line">     <span class="keyword">this</span>.liItems = <span class="literal">null</span>; <span class="comment">//要轮播的li元素集合</span></div><div class="line">     <span class="keyword">this</span>.len = <span class="number">0</span>; <span class="comment">//liItems的长度</span></div><div class="line">     <span class="keyword">this</span>.aBox = <span class="literal">null</span>; <span class="comment">//包含指示器的dom对象</span></div><div class="line">     <span class="keyword">this</span>.bBox = <span class="literal">null</span>; <span class="comment">//包含前后按钮的dom对象</span></div><div class="line"></div><div class="line">     <span class="comment">//初始化函数</span></div><div class="line">     <span class="keyword">this</span>.init = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">         <span class="comment">//初始化对象参数</span></div><div class="line">         <span class="keyword">var</span> that = <span class="keyword">this</span>;</div><div class="line">         <span class="keyword">this</span>.liItems = $(bannnerBox).find(<span class="string">'ul'</span>).find(<span class="string">'li'</span>);</div><div class="line">         <span class="keyword">this</span>.len = <span class="keyword">this</span>.liItems.length;</div><div class="line">         <span class="keyword">this</span>.aBox = $(bannnerBox).find(aBox);</div><div class="line">         <span class="keyword">this</span>.bBox = $(bannnerBox).find(btnBox);</div><div class="line">         <span class="comment">//让第一张图片显示，根据轮播图数量动态创建指示器，并让第一个指示器处于激活状态，隐藏前后按钮</span></div><div class="line">         <span class="keyword">this</span>.liItems.first(<span class="string">'li'</span>).css(&#123;</div><div class="line">             <span class="string">'opacity'</span>: <span class="number">1</span>,</div><div class="line">             <span class="string">'z-index'</span>: <span class="number">1</span></div><div class="line">         &#125;).siblings(<span class="string">'li'</span>).css(&#123;</div><div class="line">             <span class="string">'opacity'</span>: <span class="number">0</span>,</div><div class="line">             <span class="string">'z-index'</span>: <span class="number">0</span></div><div class="line">         &#125;);</div><div class="line">         <span class="keyword">var</span> aDom = <span class="string">''</span>;</div><div class="line">         <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; <span class="keyword">this</span>.len; i++) &#123;</div><div class="line">             aDom += <span class="string">'&lt;a&gt;&lt;/a&gt;'</span>;</div><div class="line">         &#125;</div><div class="line">         $(aDom).appendTo(<span class="keyword">this</span>.aBox);</div><div class="line">         <span class="keyword">this</span>.aBox.find(<span class="string">'a:first'</span>).addClass(<span class="string">"indicator-active"</span>);</div><div class="line">         <span class="keyword">this</span>.bBox.hide();</div><div class="line">         <span class="comment">//鼠标移入banner图时，停止轮播并显示前后按钮，移出时开始轮播并隐藏前后按钮</span></div><div class="line">         $(bannnerBox).hover(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.stop();</div><div class="line">             that.bBox.fadeIn(<span class="number">200</span>);</div><div class="line">         &#125;, <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.start();</div><div class="line">             that.bBox.fadeOut(<span class="number">200</span>);</div><div class="line">         &#125;);</div><div class="line">         <span class="comment">//鼠标移入指示器时，显示对应图片，移出时继续播放</span></div><div class="line">         <span class="keyword">this</span>.aBox.find(<span class="string">'a'</span>).hover(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.stop();</div><div class="line">             <span class="keyword">var</span> out = that.aBox.find(<span class="string">'a'</span>).filter(<span class="string">'.indicator-active'</span>).index();</div><div class="line">             that.now = $(<span class="keyword">this</span>).index();</div><div class="line">             <span class="keyword">if</span> (out != that.now) &#123;</div><div class="line">                 that.play(out, that.now)</div><div class="line">             &#125;</div><div class="line">         &#125;, <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.start();</div><div class="line">         &#125;);</div><div class="line">         <span class="comment">//点击左右按钮时显示上一张或下一张</span></div><div class="line">         $(btnBox).find(<span class="string">'a:first'</span>).click(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.next()</div><div class="line">         &#125;);</div><div class="line">         $(btnBox).find(<span class="string">'a:last'</span>).click(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.prev()</div><div class="line">         &#125;);</div><div class="line">     &#125;</div><div class="line">     <span class="comment">//初始化</span></div><div class="line">     <span class="keyword">this</span>.init();</div><div class="line">     <span class="comment">//开始轮播</span></div><div class="line">     <span class="keyword">this</span>.start();</div><div class="line"> &#125;</div><div class="line"></div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line">  * 播放函数</div><div class="line">  * @param out number 要消失的图片的索引值</div><div class="line">  * @param now number 接下来要轮播的图的索引值</div><div class="line">  */</div><div class="line"> Carousel.prototype.play = <span class="function"><span class="keyword">function</span> (<span class="params">out, now</span>) </span>&#123;</div><div class="line">     <span class="keyword">this</span>.liItems.eq(out).stop().animate(&#123;</div><div class="line">         <span class="attr">opacity</span>: <span class="number">0</span>,</div><div class="line">         <span class="string">'z-index'</span>: <span class="number">0</span></div><div class="line">     &#125;, <span class="number">500</span>).end().eq(now).stop().animate(&#123;</div><div class="line">         <span class="attr">opacity</span>: <span class="number">1</span>,</div><div class="line">         <span class="string">'z-index'</span>: <span class="number">1</span></div><div class="line">     &#125;, <span class="number">500</span>);</div><div class="line">     <span class="keyword">this</span>.aBox.find(<span class="string">'a'</span>).removeClass(<span class="string">'indicator-active'</span>).eq(now).addClass(<span class="string">'indicator-active'</span>);</div><div class="line"> &#125;</div><div class="line"></div><div class="line"> <span class="comment">//前一张函数</span></div><div class="line"> Carousel.prototype.prev = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">     <span class="keyword">var</span> out = <span class="keyword">this</span>.now;</div><div class="line">     <span class="keyword">this</span>.now = (--<span class="keyword">this</span>.now + <span class="keyword">this</span>.len) % <span class="keyword">this</span>.len;</div><div class="line">     <span class="keyword">this</span>.play(out, <span class="keyword">this</span>.now)</div><div class="line"> &#125;</div><div class="line"></div><div class="line"> <span class="comment">//后一张函数</span></div><div class="line"> Carousel.prototype.next = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">     <span class="keyword">var</span> out = <span class="keyword">this</span>.now;</div><div class="line">     <span class="keyword">this</span>.now = ++<span class="keyword">this</span>.now % <span class="keyword">this</span>.len;</div><div class="line">     <span class="keyword">this</span>.play(out, <span class="keyword">this</span>.now);</div><div class="line"> &#125;</div><div class="line"></div><div class="line"> <span class="comment">//开始函数</span></div><div class="line"> Carousel.prototype.start = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">     <span class="keyword">if</span> (!<span class="keyword">this</span>.hasStarted) &#123;</div><div class="line">         <span class="keyword">this</span>.hasStarted = <span class="literal">true</span>;</div><div class="line">         <span class="keyword">var</span> that = <span class="keyword">this</span>;</div><div class="line">         <span class="keyword">this</span>.interval = setInterval(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">             that.next();</div><div class="line">         &#125;, <span class="number">2000</span>);</div><div class="line">     &#125;</div><div class="line"> &#125;</div><div class="line"> <span class="comment">//停止函数</span></div><div class="line"> Carousel.prototype.stop = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">     clearInterval(<span class="keyword">this</span>.interval);</div><div class="line">     <span class="keyword">this</span>.hasStarted = <span class="literal">false</span>;</div><div class="line"> &#125;</div><div class="line"></div><div class="line"> $(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</div><div class="line">     <span class="keyword">var</span> banner1 = <span class="keyword">new</span> Carousel(<span class="string">'#J_bg_ban1'</span>, <span class="string">'#J_bg_indicator1'</span>, <span class="string">'#J_bg_btn1'</span>);</div><div class="line">     <span class="keyword">var</span> banner2 = <span class="keyword">new</span> Carousel(<span class="string">'#J_bg_ban2'</span>, <span class="string">'#J_bg_indicator2'</span>, <span class="string">'#J_bg_btn2'</span>);</div><div class="line"> &#125;);</div></pre></td></tr></table></figure>
<p>在这里对Carousel对象的原型对象进行了扩展，将play方法、next方法，perv方法，start方法和stop方法写进了Carousel的原型对象中，这样每次实例化的对象就可以共用这些方法。当然，实例化的时候也是使用new操作符。这样我们就可以在同一页面内多次使用这个轮播对象了。这种组合使用构造函数和原型的模式，是创建自定义类型最常用的方法，至此我们就完成了这个简单轮播对象的封装。</p>
<h3 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h3><p>本文是在我开始学习JavaScript继承时，对原型继承的一些理解和运用。文中所述的继承方式均是使用js特有的原型链方式，实际上有了<a href="http://es6.ruanyifeng.com/#docs/class-extends" target="_blank" rel="external">ES6的类</a>之后，实现继承的就变得十分简单了，所以这种写法现在也不在推荐使用了，对于对象的继承更推荐使用ES6的class来实现。</p>
]]></content>
    
    <summary type="html">
    
      &lt;h3 id=&quot;介绍&quot;&gt;&lt;a href=&quot;#介绍&quot; class=&quot;headerlink&quot; title=&quot;介绍&quot;&gt;&lt;/a&gt;介绍&lt;/h3&gt;&lt;p&gt;使用&lt;code&gt;jQuery&lt;/code&gt;完成的简单轮播图组件，可在同一页面多个组件同时轮播。轮播图的实现过程并不复杂，但在是在封装过程中，运用到较多基础知识点，有面向对象、&lt;code&gt;prototype&lt;/code&gt;继承、原型链等等。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;demo预览：&lt;a href=&quot;https://zsqosos.github.io/component_library/&quot;&gt;点此预览&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;代码地址： &lt;a href=&quot;https://github.com/zsqosos/component_library/tree/master/jquery-carousel&quot;&gt;https://github.com/zsqosos/component_library/tree/master/jquery-carousel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;同时发布于：&lt;a href=&quot;http://www.cnblogs.com/zsqos/p/6126782.html&quot;&gt;博客园 | jQuery轮播图（一）轮播实现并封装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
      <category term="程序" scheme="http://zsqosos.github.io/categories/program/"/>
    
    
      <category term="组件" scheme="http://zsqosos.github.io/tags/%E7%BB%84%E4%BB%B6/"/>
    
      <category term="jQuery" scheme="http://zsqosos.github.io/tags/jQuery/"/>
    
  </entry>
  
  <entry>
    <title>木心——《鱼丽之宴》</title>
    <link href="http://zsqosos.github.io/posts/extract/19940828-muxin-yulizhiyan/"/>
    <id>http://zsqosos.github.io/posts/extract/19940828-muxin-yulizhiyan/</id>
    <published>1994-08-27T16:00:02.000Z</published>
    <updated>2017-07-22T13:48:23.688Z</updated>
    
    <content type="html"><![CDATA[<p>问：动荡的时代中，您如何在战争的摧折之下继续求学，在流亡的过程中什么是您的精神支柱？</p>
<p>答：老家静如深山古刹，书本告诉我世界之大无奇不有，丰富的人生经历是我所最向往的，我知道再不闯出家门，此生必然休矣——一天比一天惶急，家庭又逼迫成婚，就像老戏文中的一段剧情，我就“人生摹仿艺术”，泼出胆子逃命。此后的四十年是一天天不容易过也容易过。所谓“人生经历”，够了，现在缺少的是写作才能而不是写作题材。我发现很多人的失落，是忘却了违背了自己少年时的立志，自认为练达，自认为精明，从前多幼稚，总算看透了，想穿了——就此变成自己少年时最憎恶的那种人。<a id="more"></a>我愧言有什么特强的上进心，而敢言从不妄自菲薄。初读米开朗基罗传，周身战栗，就这样，就是这样，就是这样了。我经历了多次各种“置之死地而后生”，一切崩溃殆尽的时候，我对自己说：“在绝望中求永生。”常见人驱使自己的“少年”“青年”归化于自己的“老年”。我的“老年”“青年”却听命于我的“少年”。顺理可以成章，那么逆理更可以成章——少年时自己说过的一句话，足够我受用终生。</p>
<hr>
<p>问：“文化浩劫”那段时期，您如何度过？如何继续写作绘画？</p>
<p>答：史学使人清醒。哲学使人坚定。我目睹很多艺文人士由于不具史学哲学的观点而临危大惧，张皇失措，彼此诬陷，怕死贪生。当此际，我方始明白史学与哲学原来有这样的实用性。此二学，我所涉不深，却也够我自始至终保持镇静。莎士比亚、贝多芬都赶上大街来批斗，我安之若素，因为无损莎士比亚、贝多芬一根毫毛，而有莎士比亚、贝多芬存在的世界，我为何不爱，为何不信，为何不满怀希望?上次在这里展览的画，半数是“浩劫”中画的（编者按：今年六月，木心先生应请在纽约林肯艺术中心国家画廊举行展览，观众踊跃，佳评如潮，林肯中心总监专文颂扬）。有一句英国谚语：“轮到别人的，也会轮到你的头上来。”那么，在作画时的命运，在展画时的命运，岂不是都被这句谚语说中了？所以读点历史书，居然颇有实用价值。至于“人在患难之中，恒以哲学自坚其心”，那是法国的谚语，几乎是格言了。</p>
<hr>
<p>问：在您的文章之中，时常讨论到佛、道、基督等教的教义，可否谈谈您个人的宗教观，或信仰的历程？</p>
<p>答：一、我是哲学地人文地对待宗教的，或说，在最初的意义上宗教是哲学现象人文现象。二、因为没有宗教异端裁判庭了，我便借借题，借之说开去。三、释迦牟尼、耶稣，我敬爱极了，敬爱极了；李聃，我更敬爱极了（他可不是道教始祖）。</p>
<p>我之所以时常涉及宗教，纯属艺术的思辨，杠杆要个支力点（“政治”、“爱情”，也可以作支力点）。</p>
<p>如果有人当面问我：</p>
<p>你是有神论者？</p>
<p>你是无神论者？</p>
<p>唯心主义？</p>
<p>唯物主义？</p>
<p>他能得到的答复是我的一脸傻笑。</p>
<p>福楼拜说：“唯物唯心，都是出言不逊。”</p>
<p>我就接说：“有神论无神论，都是用词不当。”</p>
<p>我走过的路，不是信仰的历程，沿途所见的是一代代宗教家都背离其始祖的意旨，虚伪敷衍，曲解夸大，甚而作恶多端。所以我每涉宗教，言辞激楚，原因是出于对几位始祖的“敬爱极了”。</p>
<p>我的“宗教观”有待细说从头。</p>
<p>我重视“信仰”，在《咖啡弥撒》中说了“宗教事小，信仰事大”，在《哥伦比亚的倒影》中加深一度表呈这个观念。</p>
<p>也许我终于开始有“信仰的历程”了。</p>
<p>我信仰“信仰”。</p>
<hr>
<p>问：您提到“宗教的种类愈多，宗教的意义愈少”，您是否怪罪宗教把圆融的宇宙本体解释得支离破碎？</p>
<p>答：最近，有朋自意大利来，说，在一老宅，新发现中世纪的某个预言家的手稿，内容还真不少，关于一九八四年以后的五年内将发生的大事呢，有一条是：耶稣第二次降临世界；还有一条是教廷被摧毁，教皇被驱逐。我想，两则预言未必应验，除非是基督来了，大家认不得，走了之后，才知道。</p>
<p>直接回答您的提问：</p>
<p>宗教从来没有解释过宇宙。</p>
<p>“创世记”作为一个神话是可以的。</p>
<p>“佛经”的层面如此复杂，似乎够得上“另立宇宙”，其实是以生理的心理的观点来揣摩生与死的关系。</p>
<p>迷路，并无小路大路短路长路之区别。不能说在大路长路上迷路就不是迷路了。走在达不到目的的路上，就是迷路。</p>
<p>企图解释宇宙的是科学家、哲学家、艺术家。其他的人在市场、赛马场、海滨浴场。</p>
<p>不必去怪罪宗教，宗教既不存心也无能力解释宇宙。当宗教要迫害科学哲学艺术时，我才叫起来，站起来，平常则完全可以相安无事，甚至相敬如宾。中世纪的“黑暗”在本世纪局部重现了两次，但愿没有第三次，这个世纪也就过完了。以后呢，谁知道。</p>
<p>所谓“宗教的种类愈多，宗教的意义愈少”，是指它们的自相矛盾。各宗教的互相攻讦，是“宗教逻辑病”，或称“宗教幼稚病”，用日文则更幽默些：“宗教小儿病。”</p>
<hr>
<p>问：假使不通过宗教，您认为人类还可以通过哪些方式去触及宇宙本体？如何与宇宙对话？</p>
<p>答：前一个问题中，我已答了，大致是：</p>
<p>一、“理”的探索。</p>
<p>二、“智”的推论。</p>
<p>三、“灵”的体识。</p>
<p>而人类始终只能独白。科学家、哲学家、艺术家，三个哈姆雷特在一个戏台上同时独白。</p>
<p>宇宙是不与人对话的。</p>
<p>科学家能做的是对“存在”的解析，是不具“创造”性的。四种“力”的发现，发现而已，“基本粒子”，定名错了，应改称为“非基本的基本粒子”。循微观世界的高速现象而探索，似乎有望触及宇宙本体了，危机是物质会消失，即是物质会转入人类无法观察的另一度时空架构中去，此架构目前无以为词，有人姑且叫它“观念”。不少分外敏感的科学哈姆雷特已经担心自己将落入虚无缥缈之境了。当理性到了既不够用又用不上的境界时，认输是不甘心的。所以我有点同情爱因斯坦，不愿说他前半生有巨勋而后半生白费心机。</p>
<p>哲学家，为“宇宙本体”这个谜吸引的人，一类是“宇宙拟人化”，原理同于“造神派”，谱系属于“泛神论”，最终表现是自制谜底加在“宇宙之谜”之上。另一类是把科学家的发现归纳起来，成了“科学的科学”，是“必然无神论”，最终表现是揭示了“宇宙是没有谜底的谜”——两者都不应用“唯心”“唯物”去分别。</p>
<p>都以为哲学家是冷静的、无私的，其实在罗列论点、结构体系时，各自表呈了“愿望”，黑格尔是用他的逻辑学一步步推得“总念”的吗？他是先有了“总念”，才铺陈出一套逻辑来的。所以就乏味。</p>
<p>当哲学家仅仅在那里表呈“愿望”时，我看到的是人的不同的性格，那么，各派理论集成的哲学大纲哲学史，岂非是哲学家性格一览表。所以很好玩。海涅称伊甸园中的那条蛇为“无脚的女黑格尔”。</p>
<p>艺术家天真可怜，没有仪器没有方程式没有三段论没有大小逻辑，仰对星空，一个说：“伟大的母亲哟，请你接受我这破碎的心！”另一个说：“在那众星之上，必有一位慈父。”宇宙观念成了家庭观念了。年轻的艺术家是不谈宇宙的，要到垂垂老矣，独坐莱茵河畔的夕阳光里，知道“有情”落在“无情”中了，惆怅、悲凉、柔肠百转，百转而寸断，寸断而和光同尘。每次听贝多芬的第九交响乐至第三乐章，总觉得他在向宇宙诉情，在苦劝宇宙不要那样冷酷——我以为宇宙对不起贝多芬，宇宙应该惭愧。</p>
<hr>
<p>问：您用什么心情来看待“文学”乃至“艺术”及“人”？</p>
<p>答：说来真不怕人见笑，是抱着殉道者的心态。殉道未必得道，恐怕正是因为得不到道，只好一殉了之。我选择艺术作为终身大事，是因为这世界很不公平，白痴可以是亿万富翁，疯子可以是一国君主。艺术则什么人做出什么艺术品来，这个一致性我认为是“公平”。文学因为是字组成的，掺不得半点假。要掺尽管掺，反正不是文学了。</p>
<p>最好是“得道”，其次是“闻道”，没奈何才是“殉道”。古人是朝闻道，夕死可矣，今我是朝闻道，焉甘夕死——以“死”殉道易，以“不死”殉道难。我择难。</p>
<p>“人”呢，我爱。不是说“除了不是诗的，其他都是诗”吗，那么除了不是人的，其他都是人。很高兴。</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;问：动荡的时代中，您如何在战争的摧折之下继续求学，在流亡的过程中什么是您的精神支柱？&lt;/p&gt;
&lt;p&gt;答：老家静如深山古刹，书本告诉我世界之大无奇不有，丰富的人生经历是我所最向往的，我知道再不闯出家门，此生必然休矣——一天比一天惶急，家庭又逼迫成婚，就像老戏文中的一段剧情，我就“人生摹仿艺术”，泼出胆子逃命。此后的四十年是一天天不容易过也容易过。所谓“人生经历”，够了，现在缺少的是写作才能而不是写作题材。我发现很多人的失落，是忘却了违背了自己少年时的立志，自认为练达，自认为精明，从前多幼稚，总算看透了，想穿了——就此变成自己少年时最憎恶的那种人。
    
    </summary>
    
      <category term="摘录" scheme="http://zsqosos.github.io/categories/extract/"/>
    
    
      <category term="摘录杂文" scheme="http://zsqosos.github.io/tags/%E6%91%98%E5%BD%95%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>丰子恺——《我与弘一法师》</title>
    <link href="http://zsqosos.github.io/posts/extract/19940828-mr-feng-speech-in-xiamen/"/>
    <id>http://zsqosos.github.io/posts/extract/19940828-mr-feng-speech-in-xiamen/</id>
    <published>1994-08-27T16:00:01.000Z</published>
    <updated>2017-07-22T13:50:47.758Z</updated>
    
    <content type="html"><![CDATA[<p>弘一法师是我学艺术的教师，又是我信宗教的导师。我的一生，受法师影响很大。厦门是法师近年经行之地，据我到此三天内所见，厦门人士受法师的影响也很大，故我与厦门人士不啻都是同窗弟兄。今天佛学会要我演讲，我惭愧修养浅薄，不能讲弘法利生的大义，只能把我从弘一法师学习艺术宗教时的旧事，向诸位同窗弟兄谈谈，还请赐我指教。</p>
<p>我十七岁入杭州浙江第一师范，廿岁毕业以后没有升学。我受中等学校以上学校教育，只此五年。这五年间，弘一法师，那时称为李叔同先生，便是我的图画音乐教师。图画音乐两科，在现在的学校里是不很看重的，但是奇怪得很，在当时我们的那间浙江第一师范里，看得比英、国、算还重。<a id="more"></a>我们有两个图画专用的教室，许多石膏模型，两架钢琴，五十几架风琴。我们每天要花一小时去练习图画，花一小时以上去练习弹琴。大家认为当然，恬不为怪，这是什么原故呢?因为李先生的人格和学问，统制了我们的感情，折服了我们的心。他从来不骂人，从来不责备人，态度谦恭，同出家后完全一样，然而个个学生真心的怕他，真心的学习他，真心的崇拜他。我便是其中之一人。因为就人格讲，他的当教师不为名利，为当教师而当教师，用全副精力去当教师。就学问讲，他博学多能，其国文比国文先生更高，其英文比英文先生更高，其历史比历史先生更高，其常识比博物先生更富，又是书法金石的专家，中国话剧的鼻祖。他不是只能教图画音乐，他是拿许多别的学问为背景而教他的图画音乐。夏丐尊先生曾经说，“李先生的教师，是有后光的。”像佛菩萨那样有后光，怎不教人崇拜呢？而我的崇拜他，更甚于他人。大约是我的气质与李先生有一点相似，凡他所欢喜的，我都欢喜。我在师范学校，一二年级都考第一名；三年级以后忽然降到第二十名，因为我旷废了许多师范生的功课，而专心于李先生所喜的文学艺术，一直到毕业。毕业后我无力升大学，借了些钱到日本去游玩，没有进学校，看了许多画展，听了许多音乐会，买了许多文艺书，一年后回国，一方面当教师，一方面埋头自习，一直自习到现在，对李先生的艺术还是迷恋不舍。李先生早已由艺术而升华到宗教而成正果，而我还彷徨在艺术宗教的十字街头，自己想想，真是一个不肖的学生。</p>
<p>他怎么由艺术升华到宗教呢?当时人都诧异，以为李先生受了什么刺激，忽然“遁入空门”了。我却能理解他的心，我认为他的出家是当然的。我以为人的生活，可以分作三层：一是物质生活，二是精神生活，三是灵魂生活。物质生活就是衣食。精神生活就是学术文艺。灵魂生活就是宗教。“人生”就是这样的一个三层楼。懒得(或无力)走楼梯的，就住在第一层，即把物质生活弄得很好，锦衣玉食，尊荣富贵，孝子慈孙，这样就满足了。这也是一种人生观。抱这样的人生观的人，在世间占大多数。其次，高兴(或有力)走楼梯的，就爬上二层楼去玩玩，或者久居在里头。这就是专心学术文艺的人。他们把全力贡献于学问的研究，把全心寄托于文艺的创作和欣赏。这样的人，在世间也很多，即所谓“知识分子”，“学者”，“艺术家”。还有一种人，“人生欲”很强，脚力很大，对二层楼还不满足，就再走楼梯，爬上三层楼去。这就是宗教徒了。他们做人很认真，满足了“物质欲”还不够，满足了“精神欲”还不够，必须探求人生的究竟。他们以为财产子孙都是身外之物，学术文艺都是暂时的美景，连自己的身体都是虚幻的存在。他们不肯做本能的奴隶，必须追究灵魂的来源，宇宙的根本，这才能满足他们的“人生欲”。这就是宗教徒。世间就不过这三种人。我虽用三层楼为比喻，但并非必须从第一层到第二层，然后得到第三层。有很多人，从第一层直上第三层，并不需要在第二层勾留。还有许多人连第一层也不住，一口气跑上三层楼。不过我们的弘一法师，是一层一层的走上去的。弘一法师的“人生欲”非常之强！他的做人，一定要做得彻底。他早年对母尽孝，对妻子尽爱，安住在第一层楼中。中年专心研究艺术，发挥多方面的天才，便是迁居在二层楼了。强大的“人生欲”不能使他满足于二层楼，于是爬上三层楼去，做和尚，修净土，研戒律，这是当然的事，毫不足怪的。做人好比喝酒；酒量小的，喝一杯花雕酒已经醉了，酒量大的，喝花雕嫌淡，必须喝高粱酒才能过瘾。文艺好比是花雕，宗教好比是高梁。弘一法师酒量很大，喝花雕不能过瘾，必须喝高粱。我酒量很小，只能喝花雕，难得喝一口高梁而已。但喝花雕的人，颇能理解喝高梁者的心。故我对于弘一法师的由艺术升华到宗教，一向认为当然，毫不足怪的。 </p>
<p>艺术的最高点与宗教相接近。二层楼的扶梯的最后顶点就是三层楼，所以弘一法师由艺术升华到宗教，是必然的事。弘一法师在闽中，留下不少的墨宝。这些墨宝，在内容上是宗教的，在形式上是艺术的——书法。闽中人士久受弘一法师的熏陶，大都富有宗教信仰及艺术修养。我这初次入闽的人，看见这情形，非常歆羡，十分钦佩！ </p>
<p>前天参拜南普陀寺，承广洽法师的指示，瞻观弘一法师的故居及其手种杨柳，又看到他所创办的佛教养正院。广义法师要我为养正院书联，我就集唐人诗句：“须知诸相皆非相，能使无情尽有情”，写了一副。这对联挂在弘一法师所创办的佛教养正院里，我觉得很适当。因为上联说佛经，下联说艺术，很可表明弘一法师由艺术升华到宗教的意义。艺术家看见花笑，听见鸟语，举杯邀明月，开门迎白云，能把自然当作人看，能化无情为有情，这便是“物我一体”的境界。更进一步，便是“万法从心”、“诸相非相”的佛教真谛了。故艺术的最高点与宗教相通。最高的艺术家有言：“无声之诗无一字，无形之画无一笔。”可知吟诗描画，平平仄仄，红红绿绿，原不过是雕虫小技，艺术的皮毛而已，艺术的精神，正是宗教的。古人云：“文章一小技，于道未为尊。”又曰：“太上立德，其次立言。”弘一法师教人，亦常引用儒家语：“士先器识而后文艺。”所谓“文章”’“言”，“文艺”，便是艺术，所谓“道”，“德”，“器识”，正是宗教的修养。宗教与艺术的高下重轻，在此已经明示，三层楼当然在二层楼之上的。</p>
<p>我脚力小，不能追随弘一法师上三层楼，现在还停留在二层楼上，斤斤于一字一笔的小技，自己觉得很惭愧。但亦常常勉力爬上扶梯，向三层楼上望望。故我希望：学宗教的人，不须多花精神去学艺术的技巧，因为宗教已经包括艺术了。而学艺术的人，必须进而体会宗教的精神，其艺术方有进步。久驻闽中的高僧，我所知道的还有一位太虚法师。他是我的小同乡，从小出家的。他并没有弄艺术，是一口气跑上三层楼的。但他与弘一法师，同样地是旷世的高僧，同样地为世人所景仰。可知在世间，宗教高于一切。在人的修身上，器识重于一切。太虚法师与弘一法师，异途同归，各成正果。文艺小技的能不能，在大人格上是毫不足道的。我愿与闽中人士以二法师为模范而共同勉励。 </p>
<p>——厦门佛学会讲稿，民国卅七年十一月廿八日 丰子恺</p>
]]></content>
    
    <summary type="html">
    
      &lt;p&gt;弘一法师是我学艺术的教师，又是我信宗教的导师。我的一生，受法师影响很大。厦门是法师近年经行之地，据我到此三天内所见，厦门人士受法师的影响也很大，故我与厦门人士不啻都是同窗弟兄。今天佛学会要我演讲，我惭愧修养浅薄，不能讲弘法利生的大义，只能把我从弘一法师学习艺术宗教时的旧事，向诸位同窗弟兄谈谈，还请赐我指教。&lt;/p&gt;
&lt;p&gt;我十七岁入杭州浙江第一师范，廿岁毕业以后没有升学。我受中等学校以上学校教育，只此五年。这五年间，弘一法师，那时称为李叔同先生，便是我的图画音乐教师。图画音乐两科，在现在的学校里是不很看重的，但是奇怪得很，在当时我们的那间浙江第一师范里，看得比英、国、算还重。
    
    </summary>
    
      <category term="摘录" scheme="http://zsqosos.github.io/categories/extract/"/>
    
    
      <category term="摘录杂文" scheme="http://zsqosos.github.io/tags/%E6%91%98%E5%BD%95%E6%9D%82%E6%96%87/"/>
    
  </entry>
  
</feed>
