﻿<?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-春天的木头要发芽</title><link>http://www.blogjava.net/sideshark/</link><description>很累。但不能懒</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 04:44:09 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 04:44:09 GMT</pubDate><ttl>60</ttl><item><title>javascript的OO继承</title><link>http://www.blogjava.net/sideshark/archive/2009/11/25/303610.html</link><dc:creator>春木</dc:creator><author>春木</author><pubDate>Wed, 25 Nov 2009 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/sideshark/archive/2009/11/25/303610.html</guid><wfw:comment>http://www.blogjava.net/sideshark/comments/303610.html</wfw:comment><comments>http://www.blogjava.net/sideshark/archive/2009/11/25/303610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sideshark/comments/commentRss/303610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sideshark/services/trackbacks/303610.html</trackback:ping><description><![CDATA[<p>在prototype框架中的类继承实现机制<br />
//为Object类添加静态方法：extend<br />
Object.extend = function(destination, source) { <br />
&nbsp; for(property in source) { <br />
&nbsp;&nbsp;&nbsp;&nbsp; destination[property] = source[property]; <br />
&nbsp; } <br />
&nbsp; return destination; <br />
}<br />
//通过Object类为每个对象添加方法extend<br />
Object.prototype.extend = function(object) { <br />
&nbsp; return Object.extend.apply(this, [this, object]); <br />
}<br />
Object.extend方法很容易理解，它是Object类的一个静态方法，用于将参数中source的所有属性都赋值到destination对象中，并返回destination的引用。下面解释一下Object.prototype.extend的实现，因为Object是所有对象的基类，所以这里是为所有的对象都添加一个extend方法，函数体中的语句如下：<br />
Object.extend.apply(this,[this,object]);<br />
这一句是将Object类的静态方法作为对象的方法运行，第一个参数this是指向对象实例自身；第二个参数是一个数组，包括两个元素：对象本身和传进来的对象参数object。函数功能是将参数对象object的所有属性和方法赋值给调用该方法的对象自身，并返回自身的引用。有了这个方法，下面看类继承的实现：<br />
&lt;script language="JavaScript" type="text/javascript"&gt;<br />
&lt;!--<br />
//定义extend方法<br />
Object.extend = function(destination, source) { <br />
&nbsp; for (property in source) { <br />
&nbsp;&nbsp;&nbsp;&nbsp; destination[property] = source[property]; <br />
&nbsp; } <br />
&nbsp; return destination; <br />
}<br />
Object.prototype.extend = function(object) { <br />
&nbsp; return Object.extend.apply(this, [this, object]); <br />
}<br />
//定义class1<br />
function class1(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造函数<br />
}<br />
//定义类class1的成员<br />
class1.prototype={<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method:function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("class1");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method2:function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("method2");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p><font size="2">}<br />
//定义class2<br />
function class2(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造函数<br />
}<br />
//让class2继承于class1并定义新成员<br />
class2.prototype=(new class1()).extend({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method:function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("class2");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
});</font></p>
<p><font size="2">//创建两个实例<br />
var obj1=new class1();<br />
var obj2=new class2();<br />
//试验obj1和obj2的方法<br />
obj1.method();<br />
obj2.method();<br />
obj1.method2();<br />
obj2.method2();<br />
//--&gt;<br />
&lt;/script&gt;<br />
从运行结果可以看出，继承被正确的实现了，而且派生类的额外成员也可以以列表的形式加以定义</font></p>
<img src ="http://www.blogjava.net/sideshark/aggbug/303610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sideshark/" target="_blank">春木</a> 2009-11-25 14:23 <a href="http://www.blogjava.net/sideshark/archive/2009/11/25/303610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>