﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-奋斗。！-文章分类-javascript提高</title><link>http://www.blogjava.net/try-format-go/category/52198.html</link><description>奋斗~</description><language>zh-cn</language><lastBuildDate>Mon, 16 Jul 2012 16:38:08 GMT</lastBuildDate><pubDate>Mon, 16 Jul 2012 16:38:08 GMT</pubDate><ttl>60</ttl><item><title>javascript中的"类"库</title><link>http://www.blogjava.net/try-format-go/articles/383260.html</link><dc:creator>丶format丨</dc:creator><author>丶format丨</author><pubDate>Mon, 16 Jul 2012 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/try-format-go/articles/383260.html</guid><wfw:comment>http://www.blogjava.net/try-format-go/comments/383260.html</wfw:comment><comments>http://www.blogjava.net/try-format-go/articles/383260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/try-format-go/comments/commentRss/383260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/try-format-go/services/trackbacks/383260.html</trackback:ping><description><![CDATA[一般我们在使用javascript中的类的时候，都是通过new来实例化这个类得到一个对象。<br />
<br />
<span style="color: red; "><strong>使用new这个关键字，会改变函数上下文环境，并且改变了return语句的行为。</strong><br />
</span><span><br />
比如一个Person类如下：<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">function</span>&nbsp;Person()&nbsp;{<br />&nbsp; &nbsp; this.name = "hello";<br />};&nbsp;</div><span><br />当我们new Person的时候，改变的函数执行的上下文，因此，这个类拥有了一个属性name，值为hello。 同时new还会改变return 语句的行为，会返回这个Person实例。<br /><br />然而当我们直接调用Person()方法的时候，由于没有使用new关键字，因此函数执行的上下文没有改变，依然是window。<br /><br />因此window多了一个属性name，值为hello。<br /><br />测试代码如下：<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;Person&nbsp;=&nbsp;<span style="color: #0000FF; ">function</span>(name)&nbsp;{<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.name&nbsp;=&nbsp;name;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;};<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;format&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Person('format');<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;console.log(format&nbsp;<span style="color: #0000FF; ">instanceof</span>&nbsp;Person);<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;console.log("window&nbsp;property&nbsp;-&gt;&nbsp;name:"&nbsp;+&nbsp;<span style="color: #0000FF; ">this</span>.name);<br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;Person('format');<br /><span style="color: #008080; ">12</span>&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;console.log("window&nbsp;property&nbsp;-&gt;&nbsp;name:"&nbsp;+&nbsp;<span style="color: #0000FF; ">this</span>.name);</div><span><br />结果如下：<br /><img src="http://www.blogjava.net/images/blogjava_net/try-format-go/未命名.jpg" width="317" height="61" alt="" /><br /><br /><br />理解了上面所说的原理之后，开始构建javascript"类"库。<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">var</span>&nbsp;Class&nbsp;=&nbsp;<span style="color: #0000FF; ">function</span>()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;klass&nbsp;=&nbsp;<span style="color: #0000FF; ">function</span>()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.init(arguments);<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;klass.prototype.init&nbsp;=&nbsp;<span style="color: #0000FF; ">function</span>()&nbsp;{};<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;klass;<br />};<br /><br />var Person = new Class;<br /><br />Person.prototype.init = function() {<br />&nbsp; &nbsp; //类似构造方法。可以在这里做一些初始化操作。<br />}<br /><br />//由于Class返回的依旧是一个函数，也就是类。因此我们可以实例化这个类。 得到实例对象<br />var person = new Person;<br /><br />....</div><span><br />有了这个类库之后， 当我们需要自己的类的时候，只需要new Class即可。 然后根据需求写自己的初始化代码。<br /><br /></span><img src ="http://www.blogjava.net/try-format-go/aggbug/383260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/try-format-go/" target="_blank">丶format丨</a> 2012-07-16 23:15 <a href="http://www.blogjava.net/try-format-go/articles/383260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>