javascript継承実現の一つの方法(議論を歓迎し、改善・最適化する)


以下では、jsの継承実現を実証しましたが、個人の力には限りがあります.みんなで議論してください.もっといい方法がありますか?
または他のブラウザに問題があるかどうかをテストします.
<html>
<head><script>
/**
 *  js        
 * ---
 *  :shape
 *  :Rectangle
 * ---
**/
function Shape()
{	
	if(typeof Shape._init =='undefined')
	{
		//    
		
		Shape.prototype.Draw = function()
		{
			return "draw a shape";
		}
		//
		//  		
		Shape.prototype.ToString = function()
		{
			return "this is a shape";
		}
		
		Shape.prototype.Alert = function()
		{
			alert(this.Draw() + " and " + this.ToString());
		}
		
		//   
		Shape._init = true;
	}
}

/**
 *    
 */

//                 (  ),          .
//    Rectangle.prototype = new Shape()    function Rectangle    ,
//             ,      Rectangle      Shape,             
//  ,   IE7,Opera 10.10,Safari 4.0.4      ,      ,               ,
//                !

//  ,    Rectangle.prototype = Shape.prototype        ,     ,       .

//     call,apply          ?    ,    ,         ,        js
//              .

//        ,          ,             ,       !
Rectangle.prototype = new Shape();
function Rectangle()
{
	if(typeof Rectangle._init == 'undefined')
	{		
		Rectangle.prototype.Draw = function()
		{
			return "draw a rectangle";
		}
		//     
		Rectangle._init = true;
	}
}

/**
 * Main 
*/
function Main()
{
	Main.prototype.main = function()
	{
		var shape = new Shape();
		shape.Alert();
		
		
		var rectangle = new Rectangle();
		alert(rectangle.ToString());//         
		alert(rectangle.Draw());//         
		rectangle.Alert();//        (  ).		
	}
}
var javascriptMain = new Main();
javascriptMain.main();
</SCRIPT></head>
<body>onload</body>
</html>