<?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; 函数化</title>
	<atom:link href="http://www.ilovejs.net/archives/tag/%e5%87%bd%e6%95%b0%e5%8c%96/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ilovejs.net</link>
	<description>到了创造为主的阶段，不忘继续学习</description>
	<lastBuildDate>Thu, 15 Dec 2011 06:18:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>函数化实现“伪继承机制”</title>
		<link>http://www.ilovejs.net/archives/161</link>
		<comments>http://www.ilovejs.net/archives/161#comments</comments>
		<pubDate>Wed, 06 Jan 2010 08:31:55 +0000</pubDate>
		<dc:creator>Supersha</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[函数化]]></category>
		<category><![CDATA[继承]]></category>

		<guid isPermaLink="false">http://www.ilovejs.net/?p=161</guid>
		<description><![CDATA[步骤： 1.创建一个新对象 2.有选择性的定义私有变量和方法，就是函数中通过var声明的普通变量 3.给这个新对象扩充方法 4.返回这个新对象 原理：在继承的时候，在子类中首先获得父类定义的新对象，之后在这个新对象的基础上扩充其他的方法或者重定义父类的方法. 从而达到始终都在操作同一个对象来实现“伪继承”。 [javascript] Function.prototype.method=function(name,fn){ if(!this.prototype[name]){ this.prototype[name]=fn; } return this; } var mammal = function(spec){ var &#8230; <a href="http://www.ilovejs.net/archives/161" class="more-link">了解更多</a>]]></description>
			<content:encoded><![CDATA[<p>
步骤：<br />
1.创建一个新对象<br />
2.有选择性的定义私有变量和方法，就是函数中通过var声明的普通变量<br />
3.给这个新对象扩充方法<br />
4.返回这个新对象</p>
<p>原理：在继承的时候，在子类中首先获得父类定义的新对象，之后在这个新对象的基础上扩充其他的方法或者重定义父类的方法.<br />
从而达到始终都在操作同一个对象来实现“伪继承”。
</p>
<p>[javascript]<br />
Function.prototype.method=function(name,fn){<br />
 if(!this.prototype[name]){<br />
  this.prototype[name]=fn;<br />
 }<br />
 return this;<br />
}<br />
var mammal = function(spec){<br />
      var that = {}; //创建一个新对象<br />
      //给新对象扩充方法<br />
      that.get_name = function(){<br />
            return spec.name;<br />
      };<br />
      that.says = function(){<br />
            return spec.saying || &quot;&quot;;<br />
      };<br />
      //返回这个新对象<br />
      return that;<br />
}</p>
<p>var cat=function(spec){<br />
 spec.saying=spec.saying || meow ;</p>
<p> //调用mammal方法，获得它生成的对象<br />
 var that=mammal(spec); </p>
<p> //在mammal方法返回的对象基础上扩展方法<br />
 that.purr=function(n){<br />
  var i,s=&quot;&quot;;<br />
  for(i=0;i&lt;n;i++){<br />
   if(s){<br />
    s+=&quot;-&quot;;<br />
   }<br />
   s+=&quot;r&quot;;<br />
  }<br />
  return s;<br />
 };<br />
 //重定义get_name方法<br />
 that.get_name=function(){<br />
  return that.says()+&quot; &quot;+spec.name +&quot; &quot;+that.says();<br />
 }<br />
 //返回扩展后的对象<br />
 return that;<br />
}</p>
<p>//Object扩展方法superior，通过参数名称访问父类方法<br />
Object.method( superior ,function(name){<br />
 var that=this,method=that[name];<br />
 return function(){<br />
  return method.apply(that,arguments);<br />
 }<br />
});</p>
<p>var coolcat=function(spec){<br />
 var that=cat(spec);<br />
 var super_get_name=that.superior( get_name ); //获得父类的get_name方法的引用<br />
 //重定义get_name方法<br />
 that.get_name=function(n){<br />
  return Like +super_get_name()+&quot; baby,&quot;+n;<br />
 };<br />
 //返回扩展后的对象<br />
 return that;<br />
}</p>
<p>var myCoolCat=coolcat({name:&quot;Bix&quot;});<br />
alert(myCoolCat.get_name(&quot;supersha&quot;));<br />
[/javascript]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ilovejs.net/archives/161/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

