<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>大风口 &#187; Js类及对象创建</title>
	<atom:link href="http://www.masterboke.com/tag/js%e7%b1%bb%e5%8f%8a%e5%af%b9%e8%b1%a1%e5%88%9b%e5%bb%ba/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.masterboke.com</link>
	<description>I want to change the world!</description>
	<lastBuildDate>Fri, 16 Sep 2011 09:41:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Javascript类及对象创建</title>
		<link>http://www.masterboke.com/2009/06/20/js-object-create/</link>
		<comments>http://www.masterboke.com/2009/06/20/js-object-create/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 10:33:14 +0000</pubDate>
		<dc:creator>boke</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Js类及对象创建]]></category>

		<guid isPermaLink="false">http://www.masterboke.cn/?p=498</guid>
		<description><![CDATA[<a href="http://www.masterboke.com/2009/06/20/js-object-create/" title="Javascript类及对象创建"></a>关于js里的类与c#等的区别，不在这里提，只说一下怎么创建类及对象。js里创建类及对象很简单，例如： function Room(c){ this.windows = c; this.owner = "A"; this.show = function(){ alert(this.windows); } } var r1 = new Room(4); var r2 = new Room(2); 像这样创建对象时，每次都会创建一个show()函数的副本，但其实r1和r2两个对象是可以共享同一个show()的，这样就浪费了内存。 当然，也有不浪费内存的写法，这就要用到对象的prototype属性，可以把它看成创建新对象所依赖的原型。当new时，原型的所有属性都被赋予新创建的对象，新对象中只有一个指向类中某个函数的指针，不会再生成一个副本。如下： function Room(){ }; Room.prototype.windows = 2; Room.prototype.owner = "A"; Room.prototype.show = function(){ alert(this.windows); &#8230;<p class="read-more"><a href="http://www.masterboke.com/2009/06/20/js-object-create/">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.masterboke.com/2009/06/20/js-object-create/" title="Javascript类及对象创建"></a><p><span class="pleft">关于js里的类与c#等的区别，不在这里提，只说一下怎么创建类及对象。js里创建类及对象很简单，例如：</span></p>
<pre class="brush:js">function Room(c){
    this.windows = c;
    this.owner = "A";
    this.show = function(){
        alert(this.windows);
    }
}

var r1 = new Room(4);
var r2 = new Room(2);</pre>
<p><span class="pleft">像这样创建对象时，每次都会创建一个show()函数的副本，但其实r1和r2两个对象是可以共享同一个show()的，这样就浪费了内存。</span></p>
<p><span class="pleft">当然，也有不浪费内存的写法，这就要用到对象的prototype属性，可以把它看成创建新对象所依赖的原型。当new时，原型的所有属性都被赋予新创建的对象，新对象中只有一个指向类中某个函数的指针，不会再生成一个副本。如下：</span></p>
<pre class="brush:js">function Room(){
};
Room.prototype.windows = 2;
Room.prototype.owner = "A";
Room.prototype.show = function(){
    alert(this.windows);
}

var r1 = new Room();
var r2 = new Room();</pre>
<p><span class="pleft">这样虽然没浪费内存，但当你想给r1做一些改动，比如，r1.owner=”B”，这时，r2也会被改动，这样肯定不行。</span></p>
<p><span class="pleft">啊，不是说js里创建类和对象很简单嘛，怎么还有这么多问题呀！别急，其实第一个例子已经成功达到目的了，我们这不是在寻找更合理的创建对象的方法嘛。</span></p>
<p><span class="pleft">说说我常用的两种创建对象的简单方法，不知道是不是最好的，依我目前所知，应该是最简单通用的了。</span></p>
<p><span class="pleft">这有一种，学名叫啥我忘了，似乎应该有个学名吧。其实就是前面两种方法的混合使用，用第一种方法定义对象的属性，用prototype原型链定义对象的方法。再看上面那个例子：</span></p>
<pre class="brush:js">function Room(c){
    this.windows = c;
    this.owner = "A";
}
Room.prototype.show = function(){
    alert(this.windows);
}

var r1 = new Room(4);
var r2 = new Room(2);
r1.owner = "B";
alert(r1.owner);//输出B
alert(r2.owner);//输出A</pre>
<p><span class="pleft">恩，就这样。既不浪费，又可以针对具体对象做修改。还行，嚎~</span></p>
<p><span class="pleft">再来看看另外一种方法，直接创建实例对象。如下：</span></p>
<pre class="brush:js">Room={
    init:function(c){
        this.windows = c;
        this.owner = "A";
    },
    show:function(){
        alert(this.windows);
    }
}
Room.init(4);
Room.owner = "B";
Room.show();</pre>
<p><span class="pleft">这种方式直接创建了一个对象，自然也就不用new了。不会像第一个例子那样浪费内存，也不会出现第二个例子那样情况（别问我为什么）。</span></p>
<p><span class="pleft">在大多数情况下，我会使用第3，4个例子的方式创建类及对象，简单，通用，雅俗共赏。至于怎么用这两种方式？这就要看情况了。举例来说，页面里有一个菜单栏menu，菜单栏里会有多个菜单项menuItem，这样我就会像第四个例子那样创建一个menu对象，然后像第三个例子那样创建多个menuItem对象，并将其添加到menu里。</span></p>
<p><span class="pleft">好久没写了，不知道容不容易看懂。上面仅仅是我的理解，哪里有问题，忘高手指正。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.masterboke.com/2009/06/20/js-object-create/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

